2017-02-24 26 views
1

我正在做Objective 2中2個值的乘法,這似乎很簡單,但是我乘法後得到的結果不正確,小數點後面的最後一位數字正在改變值。我用來做乘法的代碼如下。2個十進制數值的乘法客觀C

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如在許多計算器測試。任何人都可以給我一些提示,我該如何解決這個最後的數字?

回答

-2

我得到通過NSNumber代替NSDecimalNumber

NSNumber *x = @(20.16); 
NSNumber *y = @(51.3934970238095); 
NSNumber *z = @(x.doubleValue * y.doubleValue); //1036.0928999999996 
+0

這不回答這個問題,有機磷。他特別詢問了關於'NSDecimalNumber'的問題 –

+0

@yassir使用NSNumber我得到了這個結果1036.0929,我想知道如何在十進制後打印所有13個字符。你可以解釋嗎 ? –

+0

@AshleyMills可以是任何其他數據類型,如果它有效的話。 –

2

NSDecimalNumber提供了正確的答案正確的值。嘗試手動驗證結果。

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

這是正確的,但爲什麼有些計算器沒有給出這個結果?最終他們將95的值改爲96。 –

+0

@AbbasZahid這是因爲計算器的計算限制。 – n00bProgrammer