NumberFormatter 在屏幕上显示值时,可以很容易地格式化货币:
let decimal = Decimal(25.99)
let decimalNumberFormatter = NumberFormatter()
decimalNumberFormatter.numberStyle = .currencyAccounting
let output = decimalNumberFormatter.string(for: decimal)
// output = "$25.99"
Run Code Online (Sandbox Code Playgroud)
上面的代码适用于任何Decimal或Double值.十进制数字总是与正在使用的语言环境匹配.
我们认为将浮点货币值序列化为JSON并不是那么简单.
具有以下序列化方法(介意力量展开):
func serialize(prices: Any...) {
let data = try! JSONSerialization.data(withJSONObject: ["value": prices], options: [])
let string = String(data: data, encoding: .utf8)!
print(string)
}
Run Code Online (Sandbox Code Playgroud)
然后我们可以使用不同的值和类型来调用它.Double,Decimal和NSDecimalNumber(应该从Swift的桥接Decimal)在某些情况下无法正确呈现值.
serialize(prices: 125.99, 16.42, 88.56, 88.57, 0.1 + 0.2)
// {"value":[125.99,16.42,88.56,88.56999999999999,0.3]}
serialize(prices: Decimal(125.99), Decimal(16.42), Decimal(88.56), Decimal(88.57), Decimal(0.1) + Decimal(0.2))
// {"value":[125.98999999999997952,16.420000000000004096,88.56,88.57,0.3]} …Run Code Online (Sandbox Code Playgroud)