为了账号安全,请及时绑定邮箱和手机立即绑定

我应该使用NSDecimalNumber处理货币吗?

我应该使用NSDecimalNumber处理货币吗?

当我开始编写第一个应用程序的代码时,我使用NSNumber来获取货币值,而无需三思而后行。然后我认为也许c类型足以应付我的价值观。但是,由于其出色的舍入功能,在iPhone SDK论坛中建议我使用NSDecimalNumber。我不是气质的数学家,我认为尾数/指数范式可能会过大。仍然,googlin,我意识到,关于可可中的金钱/货币的大多数讨论都提到了NSDecimalNumber。请注意,我正在使用的应用程序将被国际化,因此以美分计算金额的选择实际上并不可行,因为货币结构在很大程度上取决于所使用的语言环境。我90%的人肯定我需要使用NSDecimalNumber,但是由于我在网络上没有找到明确的答案(例如:“如果您要花钱,请使用NSDecimalNumber!”),我想在这里问一下。也许答案对大多数人来说是显而易见的,但是我想在开始大规模重构应用程序之前先确定一下。说服我 :)
查看完整描述

3 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

(改编自我对其他答案的评论。)


是的你应该。仅当您不需要代表半分钱时,整数便士才能起作用。如果发生这种情况,您可以将其更改为半美分,但是如果您需要代表四分之一美分或八分之一美分呢?


唯一合适的解决方案是NSDecimalNumber(或类似的东西),它将问题推迟到10 ^ -128¢(即

0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

000000000000000000000000000000000000000000001¢)。


(另一种方法是任意精度算术,但是需要一个单独的库,例如GNU MP Bignum库。GMP在LGPL之下。我从未使用过该库,也不知道它是如何工作的,所以我无法说出它对您的效果如何。)


[编辑:显然,至少有一个人布拉德·拉尔森(Brad Larson)认为我在这个答案的某个地方谈论二进制浮点数。我不是。]


查看完整回答
反对 回复 2019-10-09
  • 3 回答
  • 0 关注
  • 898 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信