在
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论坛中的相关讨论:
- 通过文字精确的NSDecimalNumber
- ExpressFlyByFractionLiteral
相关的错误报告:
- SR-3317用于十进制文字的文字协议应支持精确的十进制精度,以与
- SR-920为文字可转换类型重新设计了内置的编译器协议。



