3

さまざまな理由から、コードでは double ではなく float を使用する必要があります。コードでリテラルを使用するには、次のように記述する必要があります。

float f = 0.75F;

または、コンパイラは「0.75」だけを double として扱うため、barf を実行します。毎回「F」を追加することなく、「0.75」のようなリテラルをフロートとして扱うように、コードに入れたり Visual Studio に設定したりできるものはありますか?

4

6 に答える 6

14

いいえ-幸いなことに、IMO。リテラルはどこでも同じように扱われます。

これは良いことです。メンテナンス開発者が来て、1 年後にコードを確認することを想像してみてください。彼は「0.75」を見て、「私は C# を知っています。これは double です。ちょっと待ってください。float 変数にどのように割り当てられているのでしょうか?」と考えます。イク。

「F」をあちこちに追加するのは本当に大変ですか?本当にそんなに多くの定数がありますか?それらを定数値として抽出して、「F-suffixed」リテラルがすべて同じ場所にあるようにしてください。

于 2009-07-20T14:13:36.410 に答える
1

この言語は、浮動小数点精度リテラルをあらゆる場所で double として解釈します。これは、コンパイラの構成可能な機能ではありません。これには正当な理由があります。

言語がコードを解釈する方法を構成すると、互換性と、保守開発者がコードの意味を理解する能力の両方で問題が発生します。

一般的にはお勧めできませんが、C# 3 では次の方法を使用して痛みを少し軽減できます。

var f = 0.75F;

この構文で 'F' サフィックスを忘れると、コンパイラは float ではなく double を作成するため、注意してください。

于 2009-07-20T14:16:31.820 に答える
1

参考までに、C# のコンパイラ オプションはすべてhttp://msdn.microsoft.com/en-us/library/6ds95cz0.aspxで確認できます。そこを確認すると、これを許可するオプションがないことがわかります。@Jon Skeet が指摘した理由から、当然のことです。

于 2009-07-20T14:18:22.720 に答える
0

フロートにはFが付いています:-)

于 2009-07-20T14:20:39.613 に答える
0

適切な動作は、コンパイラがサフィックスのないリテラルを単精度浮動小数点として解釈することではなく、倍精度から浮動小数点への変換は拡大変換と見なされるべきであることを認識することdoubleです。正しいfloat表現、または (いくつかのまれなエッジケースでは) 正確に 2 つの同等の値があり、どちらも明確に正しい値であるから 1000 兆分の 1 を超えることはありません。意味的には、 からfloatへの変換doubleは縮小変換と見なされるべきですが (コンパイラが持っていない情報を「推測」する必要があるため)、実際に発生する問題は、その方向の「拡大」で変換を行うことを正当化する可能性があります。

おそらく、Microsoft に からdoubleへの拡大変換を追加するように請願する必要がありfloatます。double描画関数を呼び出すときに、グラフィックス座標を計算するコードが型キャストで乱雑になる正当な理由はありません。

于 2012-06-09T22:40:08.537 に答える
0

常に使用することをお勧めします

var meaning = 1f;

「var」キーワードは、人間による解釈とメンテナンスの時間を大幅に節約するためです。

于 2009-07-21T21:06:22.040 に答える