Numaraları saf İngilizce sözcüklere dönüştürüyorum ve bazı garip durumlara rastladım: NSNumberFormatter
tuhaf bir çıktıya sahiptir, istenen sonuçtan daha küçüktür ancak parametre olarak alınan sayı taşmaya neden olmaz.NSNumberFormatter.string (from:) maximum possible Değeri aşılırsa taşma - Taşma - Swift
Aşağıdaki kod var:
import Foundation
var numberFormatter: NumberFormatter = NumberFormatter()
numberFormatter.numberStyle = .spellOut
var result: String?
result = numberFormatter.string(from: 999999999999999999)
print(result ?? "nil")
ve bu 18014398509481984
< 999999999999999999
eşdeğer olan eighteen quadrillion fourteen trillion three hundred ninety-eight billion five hundred nine million four hundred eighty-one thousand nine hundred eighty-four
yazdırır. 18014398509481984
'dan kelimeleri almaya çalışırsam, beklenen sonuç, yukarıda açıklanan dizedir. soru daha yapmak için, İşte Int
içine saklanan zaman
tamsayı değişmezi
9999999999999999999
taşmaları Swift Sandbox Test: Ben9
999..
bir daha eklerseniz Ancak, mesajla çöküyor anlaşılabilir.
Benim asıl soru şudur: ilk denemede çıktısı varsayarsak:
180140398509481984
numberFormatter.string(from:)
için sınırın bir tür, neden Overflow sonuçlanmaz999999999999999999
vermez, ama sadece birlikte (bu sınırı görüntüler ve9999999999999999999
Fazladan bir 9) Taşma ile sonuçlanır? BuInt64.max
daha büyük olduğu için
Garip. "180140398509481985" işlevini kullansanız bile, hecelendiğinde hala "180140398509481984" elde edersiniz. – rmaddy
Bu da garip bir sınır. 2^57 ile 2^58 arasında. – rmaddy
@rmaddy bu tam olarak ne soruyorum. Sadece bu işlevin bir sınırı mı, yoksa Int/NSNumber max değeriyle ilgili bir problem mi? –