NumberFormatter 和未签名 UInt64.max
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)
打印:
Optional("9,223,372,036,854,780,000")
Optional("-1")
但应该打印
Optional("9223372036854775807")
Optional("18,446,744,073,709,551,615")
看起来 NSNumber
正在四舍五入 Int64
而不是 UIn64
。 NSNumberFormatter
的 obj-c 版本工作正常。
我是不是遗漏了什么或者 NumberFormatter
有问题?
经过一番修修补补,找到了解决办法:
let text2 = formatter.string(for: Decimal(UInt64.max))
print(text2)
这会打印 Optional("18,446,744,073,709,600,000")
您可以使用新的 formatted 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)
这将打印
9,223,372,036,854,775,807
18,446,744,073,709,551,615
我正在尝试使用 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)
打印:
Optional("9,223,372,036,854,780,000")
Optional("-1")
但应该打印
Optional("9223372036854775807")
Optional("18,446,744,073,709,551,615")
看起来 NSNumber
正在四舍五入 Int64
而不是 UIn64
。 NSNumberFormatter
的 obj-c 版本工作正常。
我是不是遗漏了什么或者 NumberFormatter
有问题?
经过一番修修补补,找到了解决办法:
let text2 = formatter.string(for: Decimal(UInt64.max))
print(text2)
这会打印 Optional("18,446,744,073,709,600,000")
您可以使用新的 formatted 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)
这将打印
9,223,372,036,854,775,807
18,446,744,073,709,551,615