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

1.8 (doubleリテラル) をcsで乗算すると、警告が表示されますdouble。C++ では、2 つの異なる型を持つ式がある場合、値の範囲が最大の型に型昇格が実行されます。for でdoubleあり、floatこれはcsが に変換されることを意味しdoubleます。これは に割り当てられますが、 (は 32 ビットの IEEE 浮動小数点数であり、64 ビットです) のfloat値の範囲全体を表すことができない可能性があるため、警告が表示されます。doublefloatdouble

これを修正するには、次のように記述します。

f=1.8f*cs+32.0f;

またはfタイプに変更することによってdouble

注: コードをコンパイルしています。これは単なる警告であり、エラーではありません。

于 2013-02-09T15:28:34.607 に答える
3

これはエラーではなく、警告です。コードは引き続きコンパイルされます。doubleに押し込もうとしている型の値があることを警告していますfloat。これが発生する理由は、浮動小数点リテラル ( や など1.8)がデフォルト32.0で型であるためです。aに aをdouble掛けると aが得られるため、 の結果は型になります。s が必要な場合は、 および を実行する必要があります。doublefloatdouble1.8*cs+32.0doublefloat1.8f32.0f

于 2013-02-09T15:29:10.400 に答える
1

この行f=1.8*cs+32.0;では、デフォルトで type になる浮動小数点定数を使用していますdoublefそれを指定するには、フローティングサフィックスを使用する必要がありfloatます。f = 1.8f * cs + 32.0f;

C++ 浮動小数点定数を参照してください。

于 2013-02-09T15:30:01.937 に答える