文字列と浮動小数点数の変換が間違っているのはなぜですか? 質問する

文字列と浮動小数点数の変換が間違っているのはなぜですか? 質問する

以下の例をご覧ください。

float maxFloat = float.MaxValue;
string s = maxFloat.ToString();
float result = float.Parse(s); // same with Convert.ToSingle(s);

bool mustEqual = (maxFloat == result);
// It returns FALSE, why?

ベストアンサー1

次のフォーマット文字列を使用する必要があります"R":

https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx#Rフォーマット文字列

"R" または "r" ラウンドトリップ結果: 同一の数値にラウンドトリップできる文字列。サポート対象: Single、Double、および BigInteger。精度指定子: 無視されます。

  float maxFloat = float.MaxValue;
  string s = maxFloat.ToString("R"); // <- "R"
  float result = float.Parse(s);

  bool mustEqual = (maxFloat == result);

おすすめ記事