2013-03-26 45 views
2

這個小程序是用來計算出2位數的第一個和第二個數字。但是,當我嘗試在數字99上使用它時,它會打印9和8,但其他2位數字似乎可以正常工作。這可能是微不足道的,但我在編程方面相對較新。在C++中鑄造不按預期方式工作

#include <iostream> 

using namespace std; 

void test(int num) { 

    float numValue = (num*1.0)/10; 
    cout << numValue << endl; 
      // prints 9.9 

    int firstDigit = num/10; 
    cout << firstDigit << endl; 
     // prints 9 

    int secondDigit = (numValue - firstDigit) * 10; 
    cout << secondDigit << endl; 
     // prints 8, supposed to be (9.9 - 9) * 10 

} 

int main() 
{ 
    test(99); 
    return 0; 
} 
+2

此處的浮點數僅用於混淆和惹惱。 – chris 2013-03-26 06:06:43

+1

[每個計算機科學家應該知道的關於浮點運算的知識](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)。這很長,但它回答你的問題... – Cornstalks 2013-03-26 06:07:28

+1

謝謝你們,我會+1你的意見,但我不認爲我還能 – xyz 2013-03-26 06:08:47

回答

1

這是因爲(numValue - firstDigit)是不完全的0.9,而是0.89999...,因爲浮點數字是不準確的一般。所以,當你乘以10 0.8999...,你得到的8.999...的結果。然而,然後你把它變成一個int變量,所以它得到修整,準確地成爲8

你並不真的需要浮點運算爲您確切的任務,但使用整數就足夠了。

+0

謝謝你的簡短解釋,我會牢記這一點。我會立刻投票,只要我有15個代表:) – xyz 2013-03-26 06:12:37