【发布时间】:2017-06-22 02:45:48
【问题描述】:
我正在将数字转换为纯英文单词,遇到了一些很奇怪的情况:NSNumberFormatter 有一个奇怪的输出,小于期望的结果,但是作为参数的数字不会导致溢出。
我有以下代码:
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,相当于18014398509481984999999999999999999。如果我尝试从18014398509481984 获取单词,结果就是我所期望的,即上面描述的字符串。但是,如果我在999.. 中再添加一个9,它会崩溃并显示以下消息:
整数文字
9999999999999999999在存储到Int时溢出
这里是Swift Sandbox Test,为了让问题更容易理解。
我的实际问题是:假设第一次尝试的输出:180140398509481984 是numberFormatter.string(from:) 的某种限制,为什么999999999999999999 不会导致溢出,而只是显示这个限制,而9999999999999999999(加上额外的 9)会导致溢出?
【问题讨论】:
-
奇怪。即使你使用
180140398509481985,拼写出来时你仍然会得到180140398509481984。 -
这也是一个奇怪的限制。介于 2^57 和 2^58 之间。
-
@rmaddy 这正是我要问的。它只是对该函数的某种限制,还是 Int / NSNumber 最大值有问题?
-
由于某种原因,我找不到那个数字的任何特殊属性,我不知道发生了什么
-
这似乎是对
spellOut风格的NumberFormatter的某种限制/错误。
标签: ios swift overflow nsnumberformatter