C#浮点最大解析错误

C#浮点最大解析错误,c#,.net,floating-point,formatting,tostring,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, 0x7

我声明了一个包含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 }


为什么会发生这种情况?

如果您查看手表窗口中的
f1
f1.ToString()
,您将看到

f1
=3.40282347E+38

f1.ToString()
=3.402823E+38

这意味着
ToString
方法输出一个
字符串
,该字符串表示一个经过修剪的数字,并且不如4字节
浮点值
准确,但是为什么呢?

默认使用7位精度的
浮动

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

string s = f1.ToString("G10");
更好的方法是使用无损的
“R”
说明符

string s = f1.ToString("R");
MSDN:往返(“R”)格式说明符用于确保转换为字符串的数值将被解析回相同的数值


欢迎来到StackOverflow!请澄清您的具体问题或添加其他详细信息,以突出显示您所需的内容。正如目前所写的,很难准确地说出你在问什么。请参阅页面以获取澄清此问题的帮助。
string s = f1.ToString("R");