NumberFormatter and unsigned with UInt64.max



我试图使用NumberFormatter创建一个表示UInt64.max的字符串。下面是代码:

let formatter = NumberFormatter()

formatter.usesGroupingSeparator = true
formatter.numberStyle = .decimal
formatter.positiveFormat = "# ##0.#########"
formatter.maximumSignificantDigits = 20
formatter.usesSignificantDigits = false
formatter.maximumFractionDigits = 20
formatter.minimumFractionDigits = 0
formatter.alwaysShowsDecimalSeparator = false
// formatter.roundingMode = .halfUp
let text1 = formatter.string(for: NSNumber(value: Int64.max))
let text2 = formatter.string(for: NSNumber(value: UInt64.max))
print(text1)
print(text2)

打印:

可选("9223372036854780000")
可选("1")

但是应该打印

可选("9223372036854775807")
可选("18446744073709551615")

看起来NSNumber是四舍五入Int64和不采取UIn64。obj-c版本的NSNumberFormatter可以正常工作。

是我错过了什么还是NumberFormatter有问题?

您可以使用新的Generic Instance Method格式并指定number样式:

iOS15+•Xcode 13

let decimal1 = Decimal(Int64.max)
let decimal2 = Decimal(UInt64.max)
let text1 = decimal1.formatted(.number)
let text2 = decimal2.formatted(.number)
print(text1)
print(text2)

打印

9223372036854775807

18446744073709551615

经过一番修修补补,找到了一个解决方案:

let text2 = formatter.string(for: Decimal(UInt64.max))
print(text2)

打印Optional("18,446,744,073,709,600,000")

相关的线程

相关内容

  • 没有找到相关文章

最新更新