一尘不染

如何在NSDecimalNumber中存储1.66

swift

我知道float或double不适合存储货币和数量等十进制数字。我正在尝试使用NSDecimalNumber。这是我在Swift操场上的代码。

let number:NSDecimalNumber = 1.66
let text:String = String(describing: number)
NSLog(text)

控制台输出为1.6599999999999995904

如何将十进制数1.66的确切值存储在变量中?


阅读 260

收藏
2020-07-07

共1个答案

一尘不染

let number:NSDecimalNumber = 1.66

右侧是一个浮点数,不能精确表示值“ 1.66”。一种选择是从字符串创建十进制数字:

let number = NSDecimalNumber(string: "1.66")
print(number) // 1.66

另一种选择是使用算术:

let number = NSDecimalNumber(value: 166).dividing(by: 100)
print(number) // 1.66

在Swift 3中,您可以考虑使用“覆盖值类型” Decimal代替,例如

let num = Decimal(166)/Decimal(100)
print(num) // 1.66

另一个选择:

let num = Decimal(sign: .plus, exponent: -2, significand: 166)
print(num) // 1.66

附录:

Swift论坛中的相关讨论:

相关的错误报告:

2020-07-07