我正在学习第11个标准的C ++。我对C ++没有太多了解
在我的大学里,有视觉工作室2005.我有一个项目将摄氏温度转换为farenheit。这段代码在我的视觉工作室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;
}
它给了我以下错误:
从double转换为float可能
答案 0 :(得分:3)
您收到警告,因为您将1.8(double
字面值)与cs
相乘,产生double
。在C ++中,如果您有一个包含两种不同类型的表达式,则对具有最大值范围的类型执行类型提升;对于double
和float
,这意味着cs
已转换为double
。然后将其分配给float
,该double
可能无法表示float
的完整值范围(double
是32位IEEE浮点数,f=1.8f*cs+32.0f;
是64位。)因此警告。
你可以写下来解决这个问题:
f
或将double
更改为{{1}}类型。
注意:您的代码正在编译,这只是一个警告,而不是错误。
答案 1 :(得分:3)
这不是错误,这是一个警告。您的代码仍在编译中。它警告你,你有一些double
类型的值,你试图挤压到float
。之所以发生这种情况,是因为默认情况下浮点文字(例如1.8
和32.0
)的类型为double
。将double
乘以float
会得到double
,因此1.8*cs+32.0
的结果为double
类型。如果您需要float
,则必须1.8f
和32.0f
。
答案 2 :(得分:1)
在这一行中:f=1.8*cs+32.0;
您使用的是浮点常量,默认为double
。
您需要使用浮动后缀f
来指定float
:f = 1.8f * cs + 32.0f;