我在Objective c中进行了2个值的乘法,看起来非常简单,但是乘法后得到的结果不正确小数点后的最后一个数字正在改变值。我以前做乘法的代码如下。
NSDecimalNumber* x = rpnStack.back(); rpnStack.pop_back();
NSDecimalNumber* y = rpnStack.back(); rpnStack.pop_back();
NSDecimalNumber* z = [y decimalNumberByMultiplyingBy:x]; // y * x;
x = 20.16的值 y = 51.3934970238095的值 z的结果是= 1036.0928999999995,在许多计算器中测试应该是1036.0928999999996。任何人都可以给我一些提示如何解决这最后一个数字?
答案 0 :(得分:3)
NSDecimalNumber提供正确的答案。尝试手动验证结果。
51.3934970238095
* 20.16
--------------------
3.083609821428570
5.13934970238095
0.0
+ 1027.869940476190
----------------------
1036.092899999999520
答案 1 :(得分:1)
当您在控制台中打印NSDecimalNumber
时,它会根据提供的舍入行为进行舍入,通常是默认值。打印NSNumberFormatter
时,请参阅NSNumberFormatterRoundingMode
和NSDecimalNumbers
。
请参阅:
答案 2 :(得分:-2)
我使用NSNumber
代替NSDecimalNumber
NSNumber *x = @(20.16);
NSNumber *y = @(51.3934970238095);
NSNumber *z = @(x.doubleValue * y.doubleValue); //1036.0928999999996