2 个十进制数值的乘法 Objective C
Multiplication of 2 decimal number values Objective C
我正在对 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。谁能给我一些提示,我该如何解决最后一个数字?
我使用 NSNumber
而不是 NSDecimalNumber
得到了正确的值
NSNumber *x = @(20.16);
NSNumber *y = @(51.3934970238095);
NSNumber *z = @(x.doubleValue * y.doubleValue); //1036.0928999999996
NSDecimalNumber 提供了正确答案。尝试手动验证结果。
51.3934970238095
* 20.16
--------------------
3.083609821428570
5.13934970238095
0.0
+ 1027.869940476190
----------------------
1036.092899999999520
当您在控制台中打印 NSDecimalNumber
时,它会根据提供的舍入行为进行舍入,通常是默认值。打印NSDecimalNumbers
时请参考NSNumberFormatter
和NSNumberFormatterRoundingMode
。
参见:
我正在对 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。谁能给我一些提示,我该如何解决最后一个数字?
我使用 NSNumber
而不是 NSDecimalNumber
NSNumber *x = @(20.16);
NSNumber *y = @(51.3934970238095);
NSNumber *z = @(x.doubleValue * y.doubleValue); //1036.0928999999996
NSDecimalNumber 提供了正确答案。尝试手动验证结果。
51.3934970238095
* 20.16
--------------------
3.083609821428570
5.13934970238095
0.0
+ 1027.869940476190
----------------------
1036.092899999999520
当您在控制台中打印 NSDecimalNumber
时,它会根据提供的舍入行为进行舍入,通常是默认值。打印NSDecimalNumbers
时请参考NSNumberFormatter
和NSNumberFormatterRoundingMode
。
参见: