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

What's the correct number type for financial variables in Swift?

我习惯于在 Java 中编程,其中 BigDecimal 类型最适合存储财务值,因为有指定计算舍入规则的方式。

在最新的 swift 版本中(撰写此 post 时为 2.1),哪种原生类型更好地支持财务值的正确计算和舍入?是否有任何等同于 java 的 BigDecimal?或者类似的东西?

您可以对任意精度数字使用 NSDecimalNSDecimalNumber

更多信息见NSDecimalNumbers's reference page

如果您担心在 floatdouble 中存储例如 1.23 美元,以及浮点精度错误可能导致的不准确,也就是说,如果您真的想坚持整数美分或便士(或其他任何东西)。然后使用一个整数来存储您的值并使用 pence/cent 作为您的单位而不是 pounds/dollars。在处理 pence/cent 的整数时,您将 100% 准确,并且比使用 class(如 NSDecimalNumber)更容易。该值的显示纯粹是一个演示问题。

如果您需要处理 pence/cent 的分数,那么 NSDecimalNumber 可能就是您想要的。

我建议研究 class 这样的实际工作原理,以及浮点数的工作原理,因为了解这一点将帮助您了解为什么会出现精度错误以及精度限制是什么和 NSDecimalNumber 一样的 class,为什么它更适合存储十进制数,为什么浮点数擅长存储像 17/262144 这样的数字(即分母是 2 的幂)但不能存储1/100等