我习惯用Java编程,其中BigDecimal类型最适合存储财务值,因为有一些方法可以指定计算的舍入规则。
在最新的swift版本中(编写本文时为2.1),哪种原生类型更好地支持正确计算和舍入财务值?有没有相当于java的BigDecimal?或类似的东西?
答案 0 :(得分:2)
您可以使用NSDecimal
或NSDecimalNumber
获取任意精确数字。
有关NSDecimalNumbers
's reference page的更多信息,请参阅
答案 1 :(得分:1)
如果您担心在float
或double
中存储例如$ 1.23,并且您将从浮点精度错误中获得潜在的不准确性,那就是如果您确实想要坚持整数金额美分或便士(或其他任何东西)。然后使用整数来存储您的值并使用便士/分作为您的单位而不是磅/美元。然后,当处理整数量的便士/美分时,您将100%准确,并且比使用类似NSDecimalNumber
的类更容易。那么该值的显示纯粹是一个演示问题。
如果你需要处理便士/分的分数,那么NSDecimalNumber
可能就是你想要的。
我建议调查这样的类实际如何工作,以及浮点数如何工作,因为了解这一点将有助于您了解为什么出现精度错误以及类{{{{{{{{ 1}},为什么它最好存储十进制数,为什么浮点数擅长存储数字,如17/262144(即分母是2的幂),但不能存储1/100等。