相关疑难解决方法(0)

使用JSONSerialization序列化货币时指定小数位数

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)

上面的代码适用于任何DecimalDouble值.十进制数字总是与正在使用的语言环境匹配.

我们认为将浮点货币值序列化为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,DecimalNSDecimalNumber(应该从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)

double serialization json decimal swift

3
推荐指数
1
解决办法
2047
查看次数

标签 统计

decimal ×1

double ×1

json ×1

serialization ×1

swift ×1