2个十进制数值的乘法目标C.

时间:2017-02-24 13:47:21

标签: ios objective-c precision

我在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。任何人都可以给我一些提示如何解决这最后一个数字?

3 个答案:

答案 0 :(得分:3)

NSDecimalNumber提供正确的答案。尝试手动验证结果。

    51.3934970238095
  * 20.16
  --------------------
     3.083609821428570
     5.13934970238095
     0.0
+ 1027.869940476190
----------------------
  1036.092899999999520

答案 1 :(得分:1)

当您在控制台中打印NSDecimalNumber时,它会根据提供的舍入行为进行舍入,通常是默认值。打印NSNumberFormatter时,请参阅NSNumberFormatterRoundingModeNSDecimalNumbers

请参阅:

  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

答案 2 :(得分:-2)

我使用NSNumber代替NSDecimalNumber

来获得正确的值
NSNumber *x = @(20.16);
NSNumber *y = @(51.3934970238095);
NSNumber *z = @(x.doubleValue * y.doubleValue); //1036.0928999999996