Konwertuję liczby na czyste angielskie słowa, a ja natknąłem się na bardzo dziwne sytuacje: NSNumberFormatter
ma dziwne wyjście, mniejsze niż pożądany wynik , ale liczba przyjęta jako parametr nie powoduje przepełnienia.NSNumberFormatter.string (from:) maximum possible Przekroczona wartość nie powoduje przepełnienia - Swift
Mam następujący kod:
import Foundation
var numberFormatter: NumberFormatter = NumberFormatter()
numberFormatter.numberStyle = .spellOut
var result: String?
result = numberFormatter.string(from: 999999999999999999)
print(result ?? "nil")
i to drukuje eighteen quadrillion fourteen trillion three hundred ninety-eight billion five hundred nine million four hundred eighty-one thousand nine hundred eighty-four
, który jest odpowiednikiem 18014398509481984
< 999999999999999999
. Jeśli próbuję uzyskać słowa od 18014398509481984
, wynik jest tym, którego oczekiwałem, ciągiem opisanym powyżej. Jednakże, jeśli dodam jeszcze jeden 9
do 999..
, to wywala z komunikatem:
całkowitą dosłowne
9999999999999999999
przelewy, gdy przechowywany wInt
Oto Swift Sandbox Test, aby uczynić pytanie bardziej zrozumiały.
Moje rzeczywiste pytanie brzmi: Zakładając, że wyjście pierwszego Spróbuj: 180140398509481984
jest jakaś granica dla numberFormatter.string(from:)
, dlaczego nie 999999999999999999
spowodować przepełnienie, ale po prostu wyświetla ten limit, a 9999999999999999999
(z dodatkowe 9) powoduje przepełnienie?
Dziwne. Nawet jeśli użyjesz '180140398509481985', nadal otrzymasz' 180140398509481984' kiedy jest napisane. – rmaddy
To także dziwny limit. Jest między 2^57 i 2^58. – rmaddy
@rmaddy to jest dokładnie to, o co proszę. Czy jest to jakiś limit tylko dla tej funkcji, czy jest to problem z maksymalną wartością Int/NSNumber? –