swift - 如何在 NSDecimalNumber 中存储 1.66

标签 swift nsdecimalnumber

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

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

控制台输出为1.6599999999999995904

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

最佳答案

let number:NSDecimalNumber = 1.66

右边是 float ,不能表示 值“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 论坛中的相关讨论:

相关错误报告:

关于swift - 如何在 NSDecimalNumber 中存储 1.66,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42781785/

相关文章:

ios - 如何在 ios-charts 中为 BarChartView 添加 XAxis 标签

ios - NSRoundBankers 没有按照 Apple 的记录工作

swift - 如何在 Sprite Kit 中使用 SKAction 永远重复缩放对象

ios - 检测 MTLTexture 是否为空白

objective-c - NSDecimalNumber 的小数部分

iphone - NSNumberFormatter 和舍入百分比值

ios - 从 NSDecimalNumber 中删除负号 (-) 给我一个错误

ios - NSDecimal 等于 NSDecimalNumber 值?

ios - 如何在 ios swift 中从原型(prototype)单元获取数据到 Controller 并从中更新模型

swift:UISearchcontroller 在搜索开始之前/之后显示不同的 TableView