gpt4 book ai didi

objective-c - 在 CoreData 中设置时 double NSNumber 不准确(使用 RestKit)

转载 作者:行者123 更新时间:2023-12-02 21:29:14 25 4
gpt4 key购买 nike

我已在 CoreData 对象 LineItem 中将 price 定义为 double,但是要设置或使用 的值价格,我只能使用 NSNumber 包装器,这就是 CoreData 的工作原理,而且没问题。

但是我在设置数字时发现了准确性问题。

例如,我从 UITextField 数字输入中得到了一个 double 值:

[self.lineItem setPriceValue:round([_finalPrice doubleValue]*100)/100]; // This actually trivial since it is already 83.99 as you see in the log but doesn't affect the result.

NSLog(@"Price to set: %@", _finalPrice);
NSLog(@"Price set: %@", [self.lineItem price]);

这是日志:

2014-03-30 21:03:24.207 MyApp[20998:60b] Price to set: 83.99
2014-03-30 21:03:24.207 MyApp[20998:60b] Price set: 83.98999999999999

这看起来像是十进制故障之一,除了我没有真正在任何地方使用过十进制这一事实。 RestKit 有可能在某个地方使用了它,这是我无法控制的,但我对此表示怀疑。

与此同时,它在我的应用程序中引起了问题,因为它是一个商业应用程序,而我与之交谈的 API 只会将 83.98999999999999 读取为 83.98,导致涉及这些有问题的数字的每笔交易都会减少一两分钱。

最佳答案

浮点类型floatdouble以二进制存储数字,并非所有十进制小数都有精确的二进制小数等价物。因此,需要精确的货币计算应该使用适当单位(例如美分或便士)的整数类型来完成,或者使用小数浮点类型(例如由 NSDecimalNumber 提供的)来完成。选择使用哪个取决于您需要表示的值的范围以及您需要执行的计算类型。

关于objective-c - 在 CoreData 中设置时 double NSNumber 不准确(使用 RestKit),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22753485/

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