如何在 NSDecimalNumber 中存储 1.66
How to store 1.66 in NSDecimalNumber
我知道 float 或 double 不适合存储货币和数量等十进制数字。我正在尝试改用 NSDecimalNumber。这是我在 Swift 操场上的代码。
let number:NSDecimalNumber = 1.66
let text:String = String(describing: number)
NSLog(text)
控制台输出为1.6599999999999995904
如何在变量中存储十进制数 1.66 的精确值?
在
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,您可以考虑使用 "overlay value type" 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论坛相关讨论:
相关错误报告:
我知道 float 或 double 不适合存储货币和数量等十进制数字。我正在尝试改用 NSDecimalNumber。这是我在 Swift 操场上的代码。
let number:NSDecimalNumber = 1.66
let text:String = String(describing: number)
NSLog(text)
控制台输出为1.6599999999999995904
如何在变量中存储十进制数 1.66 的精确值?
在
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,您可以考虑使用 "overlay value type" 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论坛相关讨论:
相关错误报告: