正在分析浮点值的字符串
本文关键字:字符串 | 更新日期: 2023-09-27 18:25:04
我正在读取一个XML文件,并读取10534360.9 的特定值
当我将字符串解析为十进制(decimal.Parse(afNodes2[0][column1].InnerText)
)时,我得到10534360.9
,但当我将其解析为浮点(float.Parse(afNodes2[0][column1].InnerText)
)时,得到1.053436E+07
。
有人能解释一下原因吗?
您看到的是用"E"或"指数"表示法表示的值。
1.053436E+07
相当于1.053436 x 10^7
或10,534,360
,这是.NET将10,534,360.9
存储在System.Single
(float
)数据类型(32位,7位精度)中最精确的方式。
您看到它是这样表示的,因为它是Single.ToString()
方法生成的默认格式,调试器使用该方法在手表屏幕、控制台等上显示值。
编辑
这可能是不言而喻的,但如果你想在XML中保留原始值的精度,你可以选择一种可以保留更多数字信息的数据类型:
System.Double
(64位,15-16位)System.Decimal
(128位,28-29位有效数字)
1.0553436E+07==10534360.9
这些数字是一样的,只是显示方式不同而已。
因为float的精度为7位数。十进制的精度为28位。
在调试器中查看数据或通过.ToString
显示数据时,默认情况下可能会使用科学表示法进行格式化:
返回值的一些示例有"100"、"-123456789"、"123.45e+6"、"500"、"3.1416"、"600"、"-0.123"answers"-无穷大"。
要将其格式化为精确输出,请使用R
(往返)格式字符串:
myFloat.ToString("R");
http://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx