1. ホーム
  2. c#

[解決済み] 浮動小数点数の宣言に "f "が必要なのはなぜですか?

2023-03-20 20:47:30

質問

float timeRemaining = 0.58f;

なぜ f が必要なのでしょうか?

どのように解決するのですか?

floatの宣言は2つの部分を含んでいます。

  1. この宣言では、変数 timeRemaining は型 float .
  2. 値を割り当てます。 0.58 をこの変数に代入します。

その2で問題が発生します。

右辺は勝手に評価されます。C#の仕様によると、接尾辞のない小数点を含む数値は、解釈として double .

ということで、今、私たちは double 型の変数に代入します。 float から double . このような変換はありません。なぜなら、変換の際に情報が失われる可能性があるからです(この場合、情報は失われます)。

コンパイラが使う値は実際には0.58ではなく、0.58に最も近い浮動小数点値、つまり0.5799999999998655962351581366だからです...そのため float で 0.5799946057796478271484375 、そして double .

厳密には float は必要ありません。を使わなくても済むように f サフィックスの使用を避けるには、値を f :

float