2013-02-09 44 views
0

我正在學習第11標準的C++。我沒有太多有關C++的知識。浮動和在visual studio中的雙重類型2012

在我的大學裏,有visual studio 2005.我有一個項目可以將攝氏溫度轉換成華氏溫度。此代碼工作正常在我的大學在Visual Studio 2005:

#include <iostream> 

int main() 
{ 
    float f,cs; 

    cin>>cs; 
    cout<<"\n celsius = "<<cs; 
    f=1.8*cs+32.0; 
    cout<<"f = "<<f; 
} 

但是當我修改後運行在Visual Studio 2012的代碼:

#include "stdafx.h" 
#include <iostream> 
using namespace std; 

int main() 
{ 
    float f,cs; 

    cin>>cs; 
    cout<<"\n cs = "<<cs; 
    f=1.8*cs+32.0; 
    cout<<"f = "<<f; 
} 

它給了我下面的錯誤:

從雙倍轉換爲浮動可能

+1

注意,'的main()'函數應該有特色'INT主要()'或'INT主(INT ARGC, char * argv [])'。 'void main()'是非標準的。 – 2013-02-09 15:29:51

回答

3

您正在獲得一個華因爲你將1.8(這是double文字)乘以cs,產生double。在C++中,如果您有兩種不同類型的表達式,則會對類型的促銷執行具有最大值範圍的類型;對於doublefloat這意味着cs轉換爲double。然後將其分配給float,該值可能無法表示double的全部值範圍(float是32位IEEE浮點數,double是64位。)因此發出警告。

您可以通過書面形式解決這個問題:

f=1.8f*cs+32.0f; 

或通過改變fdouble類型。

注意:您的代碼正在編譯,這只是一個警告,不是一個錯誤。

3

這不是一個錯誤,它是一個警告。你的代碼仍然編譯。這是警告你,你有一些double的價值,你試圖擠進float。它發生的原因是因爲默認情況下浮點文字(如1.832.0)類型爲double。將double乘以float即爲double,因此1.8*cs+32.0的結果爲double。如果你想float s,你必須做1.8f32.0f

1

在這一行:f=1.8*cs+32.0;您正在使用浮點常量,默認爲double。 您需要使用浮點後綴f指定它的floatf = 1.8f * cs + 32.0f;

C++ Floating-Point Constants