在visual studio 2012中浮动和双重类型

时间:2013-02-09 15:26:14

标签: c++ visual-c++ visual-studio-2012 floating-point

我正在学习第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可能

3 个答案:

答案 0 :(得分:3)

您收到警告,因为您将1.8(double字面值)与cs相乘,产生double。在C ++中,如果您有一个包含两种不同类型的表达式,则对具有最大值范围的类型执行类型提升;对于doublefloat,这意味着cs已转换为double。然后将其分配给float,该double可能无法表示float的完整值范围(double是32位IEEE浮点数,f=1.8f*cs+32.0f; 是64位。)因此警告。

你可以写下来解决这个问题:

f

或将double更改为{{1}}类型。

注意:您的代码正在编译,这只是一个警告,而不是错误。

答案 1 :(得分:3)

这不是错误,这是一个警告。您的代码仍在编译中。它警告你,你有一些double类型的值,你试图挤压到float。之所以发生这种情况,是因为默认情况下浮点文字(例如1.832.0)的类型为double。将double乘以float会得到double,因此1.8*cs+32.0的结果为double类型。如果您需要float,则必须1.8f32.0f

答案 2 :(得分:1)

在这一行中:f=1.8*cs+32.0;您使用的是浮点常量,默认为double。 您需要使用浮动后缀f来指定floatf = 1.8f * cs + 32.0f;

请参阅C++ Floating-Point Constants