NSDecimalNumber 四舍五入在 iOS 11 中不起作用

Posted

技术标签:

【中文标题】NSDecimalNumber 四舍五入在 iOS 11 中不起作用【英文标题】:NSDecimalNumber Rounding not working in iOS 11 【发布时间】:2018-03-13 23:26:41 【问题描述】:

我有一个应用程序从 ios 9 开始就在商店中。最近它刚刚因为舍入错误而崩溃。我正在使用 Xcode 版本 9.2 (9C40b)。我在 iOS 9 中编写了一段显示舍入工作的文本代码,但在 iOS 11 中没有。结果应四舍五入到小数点后 2 位。

NSDecimalNumberHandler* round = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:2 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:YES];
NSDecimalNumber* myNumber = [NSDecimalNumber decimalNumberWithString:@"67.95999999999997"];
NSDecimalNumber* result = [myNumber decimalNumberByRoundingAccordingToBehavior:round];
NSLog(@"myNumber = %@", myNumber);
NSLog(@"rounding result = %@", result);

在 iOS 11 上:

我的号码 = 67.95999999999997 舍入结果 = 67.96000000000001

**在 iOS9 上 ** 我的号码 = 67.95999999999997 舍入结果 = 67.96

【问题讨论】:

【参考方案1】:

更新 - 问题已解决

这不是舍入错误,而是 NSDecimalNumber 的描述方法的问题。当我使用调试器查看值时,它是正确的。

要查看正确的结果,请使用:

NSLog(@"rounding result = %@", result.stringValue);

【讨论】:

谢谢!!!这救了我的命,我不知道我花了多少时间试图让它工作,这是错误的日志语句:) 太棒了

以上是关于NSDecimalNumber 四舍五入在 iOS 11 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

舍入 NSDecimalNumber

2016-5-25NSDecimalNumber 知识点的简单整理

iOS - Json解析精度丢失处理(NSString, Double, Float)

iOS中关于如何正确处理价格

IOS中如何使用NSDecimalNumber转换经纬度

NSDecimalNumber integerValue 在 iOS8 中表现异常