0

我正在学习第 11 个标准的 C++。我对C++了解不多

在我的大学里,有 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;
}

它给了我以下错误:

可以从 double 转换为 float

4

3 回答 3

3

double当您将 1.8(这是一个文字)乘以 时,您会收到一个警告,cs产生一个double. 在 C++ 中,如果您有一个具有两种不同类型的表达式,则会对具有最大值范围的类型执行类型提升;for这意味着转换double为. 然后将其分配给 a ,它可能无法表示(是 32 位 IEEE 浮点数,是 64 位的完整值范围。) 因此发出警告。floatcsdoublefloatdoublefloatdouble

您可以通过编写以下内容来解决此问题:

f=1.8f*cs+32.0f;

或通过更改f为 type double

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

于 2013-02-09T15:28:34.607 回答
3

这不是错误,而是警告。您的代码仍然可以编译。它警告您,您有一些类型的值double,您正试图将其压缩到float. 它发生的原因是因为浮点字面量(例如1.8and 32.0)是double默认类型的。a 乘以 adouble得到floata double,因此 的结果1.8*cs+32.0是 type double。如果你想要floats,你必须做1.8fand 32.0f

于 2013-02-09T15:29:10.400 回答
1

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

请参阅C++ 浮点常量

于 2013-02-09T15:30:01.937 回答