C#float max parse错误

时间:2016-08-29 06:28:23

标签: c# .net floating-point formatting tostring

我声明了一个包含4个字节的字节数组。

byte[] bts = new byte[] { 0xff, 0xff, 0x7f, 0x7f }; 
float f1 = BitConverter.ToSingle(bts, 0); 
string s = f1.ToString(); 
float f2 = float.Parse(s); 
byte[] bts2 = BitConverter.GetBytes(f2);

经过一些转换后,我意识到输出会从

变化
{ 0xff, 0xff, 0x7f, 0x7f }

{ 0xfD, 0xff, 0x7f, 0x7f }

为什么会这样?

1 个答案:

答案 0 :(得分:3)

如果您在观察窗口中查看f1f1.ToString(),您会看到

  

f1 = 3.40282347E + 38

     

f1.ToString() = 3.402823E + 38

这意味着ToString方法输出表示修剪数字的string,并且不如4字节float 那么准确但是为什么?

默认float.ToString使用The G specifier in the standard numeric format stringsfloats的精确度为7位数。

您可以使用other overload of ToString指定格式说明符,并为其提供您想要表示的位数:

string s = f1.ToString("G10");

更好的方法是使用无损的"R"说明符

string s = f1.ToString("R");
  

MSDN:往返(" R")格式说明符用于确保转换为字符串的数值将被解析回相同的数值。