Swift中金融变量的正确数字类型是什么?

时间:2016-03-17 11:48:02

标签: swift swift2 currency financial

我习惯用Java编程,其中BigDecimal类型最适合存储财务值,因为有一些方法可以指定计算的舍入规则。

在最新的swift版本中(编写本文时为2.1),哪种原生类型更好地支持正确计算和舍入财务值?有没有相当于java的BigDecimal?或类似的东西?

2 个答案:

答案 0 :(得分:2)

您可以使用NSDecimalNSDecimalNumber获取任意精确数字。

有关NSDecimalNumbers's reference page的更多信息,请参阅

答案 1 :(得分:1)

如果您担心在floatdouble中存储例如$ 1.23,并且您将从浮点精度错误中获得潜在的不准确性,那就是如果您确实想要坚持整数金额美分或便士(或其他任何东西)。然后使用整数来存储您的值并使用便士/分作为您的单位而不是磅/美元。然后,当处理整数量的便士/美分时,您将100%准确,并且比使用类似NSDecimalNumber的类更容易。那么该值的显示纯粹是一个演示问题。

如果你需要处理便士/分的分数,那么NSDecimalNumber可能就是你想要的。

我建议调查这样的类实际如何工作,以及浮点数如何工作,因为了解这一点将有助于您了解为什么出现精度错误以及类{{{{{{{{ 1}},为什么它最好存储十进制数,为什么浮点数擅长存储数字,如17/262144(即分母是2的幂),但不能存储1/100等。