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时请参考NSNumberFormatterNSNumberFormatterRoundingMode

参见:

  1. https://developer.apple.com/reference/foundation/nsdecimalnumber?language=objc

  2. https://developer.apple.com/reference/foundation/nsdecimalnumberhandler

  3. https://developer.apple.com/reference/foundation/nsnumberformatter