C#浮点最大解析错误
我声明了一个包含4个字节的字节数组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
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");