2008-11-24 34 views
1

爲什麼每當我編譯,並在Visual Studio 2008中運行下面的代碼:造成不一致的static_cast混亂

double value1 = 10.5; 
double value2 = 15.5; 
int whole_number = value1 + value2; 
Console::WriteLine(whole_number); 

我得到的26不正確的值,而答案是25

然而,當我使用靜態投給雙打,我得到正確的答案,這是25.

如何解釋錯誤的輸出?

回答

9

這是絕對正確的。

double value1 = 10.5; 
double value2 = 15.5; 
int whole_number = value1 + value2; // int whole_number = 26.0; 
Console::WriteLine(whole_number); 

什麼,你會期望呢?編譯器首先評估右側,然後隱式轉換爲int。因此,26.0成爲26

當你施放添加之前,那麼你要添加1015,導致25 :)

2

其實,你可以不依賴於浮點數到輪任做自動轉換的方式。如果26.0由26.00005表示,則它將四捨五入爲26,如果它由25.999995表示,則它將四捨五入爲25.如果您想確定,請使用math.h中定義的標準C函數round。說因此,26.0變成26不太正確。

+0

如果它是* 26.0,那麼它將變成26.這是非常正確的。但如果它是25.999995,就像你說的那樣,它是25,就像你說的那樣。 – 2008-11-24 01:53:42