正在分析浮点值的字符串

本文关键字:字符串 | 更新日期: 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^710,534,360,这是.NET将10,534,360.9存储在System.Singlefloat)数据类型(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