gpt4 book ai didi

iOS:NSDecimalNumber 计算和货币的准确性

转载 作者:行者123 更新时间:2023-11-28 22:12:56 25 4
gpt4 key购买 nike

我正在来回计算一些值,这就是我遇到问题的地方。假设您每年有 100 美元的金额,并使用十进制数字将它们作为月值保存到 CoreData:

[self.sumPerMonth decimalNumberByAdding:[amount decimalNumberByDividingBy:[NSDecimalNumber decimalNumberWithString:@"12"]]];

好的,所以我的 100 美元现在是 8.33333333333333.... 现在在我的应用程序的某些地方,我想将值(value)恢复到每年。因此,如果我现在计算 12*8.33333333,我得到的不是 100,而是非常接近的值:99.999999999999999999999999999999999996。

对于进度条,我正在这样做,结果是 100%,这正是我真正想要的(花钱是 100,预算是 99.999999999999999999999999999999999996):

[[moneySpent decimalNumberByDividingBy:budget] doubleValue]

但是如果我这样做(budgetLeft 是 budget-moneySpent):

[budgetLeft compare:[NSDecimalNumber zero]] == NSOrderedAscending

结果为 TRUE,这是错误的。对于货币,这应该是 0,因为 99.999999...6 应该是 100。

那么你会如何处理呢?我有点困惑……我应该只使用 doubleValues 进行比较吗?或者我应该总是四舍五入 NSDecimalNumbers 还是什么?

最佳答案

您可以使用 decimalNumberByRoundingAccordingToBehaviour: NSDecimalNumber 的方法,只要你需要四舍五入到“货币”。 NSDecimalNumberBehaviours协议(protocol)允许您指定舍入模式和比例(小数位)- 因此您可以在需要实际货币金额时舍入到两位小数 - 通常在任何计算结束时。

关于iOS:NSDecimalNumber 计算和货币的准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22450522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com