我发现let
的默认值为NumberFormatter#maximumFractionDigits
。
3
我将import Foundation
let nf = NumberFormatter()
nf.numberStyle = .decimal
print(nf.maximumFractionDigits) //=> 3
nf.string(for: Decimal(string: "100.1111111")) //=> "100.111"
设置为Int.max
maximumFractionDigits
为什么!?成为import Foundation
let nf = NumberFormatter()
nf.numberStyle = .decimal
nf.maximumFractionDigits = Int.max
nf.string(for: Decimal(string: "100.1111111")) // => "100"
!!
我阅读了"100"
源代码。
open var maximumFractionDigits:Int
Foundation > NSNumberFormatter > NumberFormatter
数据类型为maximumFractionDigits
。
如何将max设置为Int
?
我想尽可能显示服务器响应而不会丢失。
当然,服务器响应是maximumFractionDigits
中的String
。但是,大多数json
中的Decimal
都在ios应用中进行计算。因此,此目标是将String
的{{1}}转换为Decimal
。
String
。为什么会丢失数据?这是UILabel
上的错误吗?nf.maximumFractionDigits = Int.max
?答案 0 :(得分:1)
问题1。 nf.maximumFractionDigits =最大整数为什么会丢失数据?这是NumberFormatter上的错误吗?
如果没有明确记录,则每个Int
参数可能会有一个限制,具体取决于实现细节。如果传递的值超过了此限制,则运行时错误可能会导致崩溃或被忽略,所有这些都取决于实现细节。
据我测试,可以设置为maximumFractionDigits
的最大值与Int32.max
相同。
let nf = NumberFormatter()
nf.numberStyle = .decimal
nf.maximumFractionDigits = Int(Int32.max)+1
print(nf.string(for: Decimal(string: "123.45678901234567890123456789012345678"))!)
//->123
nf.maximumFractionDigits = Int(Int32.max)
print(nf.string(for: Decimal(string: "123.45678901234567890123456789012345678"))!)
//->123.45678901234567890123456789012345678
您可以将其称为“错误”(em),但是NumberFormatter
可以处理的最大有效位数为Decimal
的38位。谁想对比实际预期值大百万倍的值进行精确定义?
第二季度。如何将max正确地设置为maximumFractionDigits?
如上所述,Decimal
中保留的有效数字为38。您可以这样写:
let nf = NumberFormatter()
nf.numberStyle = .decimal
nf.usesSignificantDigits = true
nf.maximumSignificantDigits = 38
print(nf.string(for: Decimal(string: "123.45678901234567890123456789012345678"))!)
//->123.45678901234567890123456789012345678