为什么在string和float之间转换错误?

Tro*_*ran 32 c#

请参阅下面的示例.

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?
Run Code Online (Sandbox Code Playgroud)

Dmi*_*nko 47

你应该使用"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#RFormatString

"R"或"r"往返结果:可以往返于相同数字的字符串.支持者:Single,Double和BigInteger.精度说明符:忽略.

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

  bool mustEqual = (maxFloat == result);
Run Code Online (Sandbox Code Playgroud)

  • @deworde:`float`和`Single`是同义词:https://msdn.microsoft.com/en-US/library/b1e65aza.aspx(以及`double`和`Double`)."键入float ... .NET Framework类型System.Single" (9认同)

Sae*_*ini 29

// It returns FALSE, why?

因为float.ToString()默认输出7位精度数,所以你float.MaxValue具有的值3.40282347E+38(9位精度)将成为圆形以3.402823E+38与您的校验失败原因当然3.402823E+38 != 3.40282347E+38.

如果明确指定要float.MaxValue以9位精度输出的格式说明符,例如float.MaxValue.ToString("G9"),您的检查将成功.