【发布时间】:2011-01-18 11:31:51
【问题描述】:
我正在尝试转换指数数字 1.11111117E+9,它实际上是一个 10 位数字“1111111111”。当我尝试使用 decimal.TryParse 方法转换此指数数时,它会将最后 3 位数字设为零并将数字设为“111111000”。任何 10 位数字都会发生这种情况。
decimal amount;
decimal.TryParse("1.11111117E+9", NumberStyles.Any, null, out amount);
这很奇怪,但我无法弄清楚这里有什么问题,谁能告诉我这有什么问题?
编辑: 很抱歉这个误导性的问题。正如 Henrik 在他的回答中提到的,这正是我所面临的。
float f = 1111111111;
string s = f.ToString();
decimal amount;
decimal.TryParse(s, NumberStyles.Any, null, out amount);
这将始终返回 1111111000?如何解决此问题以获得正确的值?将其从浮点数据类型更改为 Double 或 Decimal 是解决方案还是其他?
【问题讨论】:
-
'111111111' 是一个 9 位的数字,当然不等于 '1.11111117E+9'。你的问题还很不清楚……
-
另外值得注意的是,1.11111117E9 将是 1111111170。如果您的源编号精度不足,则需要在末尾添加一些零来填充它。
-
@Jon Skeet:抱歉打错了。已更正。
-
@JPReddy:无论它来自哪里,1.11111117E+9 不是 1111111111。
标签: c# parsing decimal tryparse exponential