爲什麼每當我編譯,並在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.
如何解釋錯誤的輸出?
爲什麼每當我編譯,並在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.
如何解釋錯誤的輸出?
這是絕對正確的。
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
當你施放添加之前,那麼你要添加10
和15
,導致25
:)
其實,你可以不依賴於浮點數到輪任做自動轉換的方式。如果26.0由26.00005表示,則它將四捨五入爲26,如果它由25.999995表示,則它將四捨五入爲25.如果您想確定,請使用math.h
中定義的標準C函數round
。說因此,26.0變成26不太正確。
如果它是* 26.0,那麼它將變成26.這是非常正確的。但如果它是25.999995,就像你說的那樣,它是25,就像你說的那樣。 – 2008-11-24 01:53:42