我将数字转换为纯英文单词,并遇到一些非常奇怪的情况:NSNumberFormatter
有一个奇怪的输出,比想要的结果小,但是作为参数的数字不会导致溢出。NSNumberFormatter.string(from:)最大可能的值超出不会导致溢出 - 斯威夫特
我有以下代码:
import Foundation
var numberFormatter: NumberFormatter = NumberFormatter()
numberFormatter.numberStyle = .spellOut
var result: String?
result = numberFormatter.string(from: 999999999999999999)
print(result ?? "nil")
和此打印eighteen quadrillion fourteen trillion three hundred ninety-eight billion five hundred nine million four hundred eighty-one thousand nine hundred eighty-four
,这是18014398509481984
< 999999999999999999
等效。如果我试图从18014398509481984
获得单词,那么结果就是我期望的结果,即上面描述的字符串。不过,如果我添加一个9
到999..
,它与消息崩溃:
整数文字
9999999999999999999
溢出时存入Int
这里是一个Swift Sandbox Test,为了使问题更可以理解的。
我实际的问题是:假设第一次尝试的输出:180140398509481984
是某种限制为numberFormatter.string(from:)
,为什么999999999999999999
不会导致溢出,而只是显示极限,9999999999999999999
(带额外9)导致溢出?
奇怪。即使你使用'180140398509481985',拼写出来的时候你仍然会得到'180140398509481984'。 – rmaddy
这也是一个奇怪的限制。它介于2^57和2^58之间。 – rmaddy
@rmaddy这正是我所要求的。这是否仅限于某种功能,还是Int/NSNumber max值有问题? –