2013-02-09 3 views
0

11 번째 표준에서 C++을 배우고 있습니다. C++에 대한 지식이 많지 않습니다.Visual Studio 2012에서 float 및 double 유형

내 대학에는 Visual Studio 2005가 있습니다. 섭씨를 farenheit로 변환하는 프로젝트가 있습니다. 이 코드는 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; 
} 

하지만 수정 한 후 비주얼 스튜디오 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

공지 사항()'또는'INT 주 (INT의는 argc를 참조하십시오, char * argv [])'. 'void main()'은 비표준입니다. –

답변

3

1.834 (double 리터럴)과 cs을 곱하면 double이됩니다. C++에서 두 가지 유형의 표현식이있는 경우 유형 승격이 가장 큰 값 범위를 갖는 유형으로 수행됩니다. doublefloat의 경우 이는 csdouble으로 변환됨을 의미합니다. 그런 다음 에 할당되며 double의 전체 값 범위를 나타내지 못할 수 있습니다 (float은 32 비트 IEEE 부동 소수점 숫자이므로 double은 64 비트입니다). 따라서 경고입니다.

당신은 서면으로이 문제를 해결할 수 있습니다

f=1.8f*cs+32.0f; 

또는 f을 변경하여

유형 double 될 수 있습니다.

참고 : 코드가 컴파일되고 있습니다. 이것은 경고가 아닌 오류입니다.

3

이것은 오류가 아니며 경고입니다. 코드가 여전히 컴파일됩니다. 으로 찌그러 뜨리려는 유형 double의 가치가 있다고 경고합니다. 그 이유는 부동 소수점 리터럴 (예 : 1.832.0)이 기본값으로 double이기 때문입니다. doublefloat을 곱하면 double이되므로 1.8*cs+32.0의 결과는 double입니다. float을 원하면 1.8f32.0f을 사용해야합니다.

1

이 행의 내용은 f=1.8*cs+32.0;이며 기본값은 double 인 부동 소수점 상수를 사용하고 있습니다. 당신이 float의 지정 부동 접미사 f를 사용해야합니다 : f = 1.8f * cs + 32.0f;

는`주() '함수는`INT 주요 서명을해야 C++ Floating-Point Constants