【发布时间】:2015-10-19 00:45:06
【问题描述】:
因此,根据 Apple 关于 NSRoundBankers 的文档:
四舍五入到最接近的可能返回值;在两种可能性中间时,返回最后一位为偶数的可能性。
虽然这适用于正数,但我没有得到负数的预期行为。这是我在设备和模拟器上执行的一段代码,都打印了完全相同的结果:
NSDecimalNumber *increment = [NSDecimalNumber decimalNumberWithMantissa:5 exponent:-2 isNegative:NO];
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithMantissa:10 exponent:-1 isNegative:YES];
NSDecimalNumberHandler *handler = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundBankers scale:1 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:YES];
while ([number compare:@1] == NSOrderedAscending)
{
NSLog(@";%@;%@", number, [number decimalNumberByRoundingAccordingToBehavior:handler]);
number = [number decimalNumberByAdding:increment];
}
在负数上,它不返回最后一位为偶数的,它基本上是向下取整。
例如,对于 -0.85,我应该得到 -0.8,但我得到的是 -0.9
我做错了吗?
左表显示了实际行为,红色标记了错误的四舍五入值。
右表显示了预期的行为,绿色表示正确的舍入值。
【问题讨论】:
-
它只发生在 -0.85....你也尝试过其他数字吗?
-
是的,你可以在表中看到 -0.65 应该是 -0.6 但它是 -0.7 与 -0.45、-0.25、-0.05 相同的东西.....
-
你试过 nsroundplain 吗?如果那也不能锻炼……那就向苹果报告吧!!!
-
我们需要在后端和客户端上具有相同的行为,所以我真的不能选择不同的舍入方法。 ://
-
在文档中:developer.apple.com/library/mac/documentation/Cocoa/Reference/… Apple 展示了 NSRoundBankers 将 -1.35 舍入为 -1.4 的示例,因此这似乎是设计行为。
标签: ios objective-c ios7 ios8 nsdecimalnumber