Convert.ToDecimal格式错误

时间:2014-12-08 17:01:10

标签: c# .net

使用Convert.ToDecimal得到了一个奇怪的问题: -

decimal percent = 0;
double dr = 0.000015;
Convert.ToDecimal(dr.ToString());
percent = Decimal.Round(Convert.ToDecimal(dr.ToString()), 3);

这会产生错误"输入字符串的格式不正确。"。稍微改变dr值,到0.00015甚至0.100015(因此,保持相同数量的DP)工作正常,但不是前四个十进制数字为0的地方。我有点难过,这似乎很奇怪(但它可能很简单)我不明白为什么这可能是文化问题?

编辑,澄清:这不是我的代码,我在其他人的代码中修正错误,所以我不知道为什么这样做(可能十进制值实际上在数据行中,因此ToString部分可能正在处理空值。)

2 个答案:

答案 0 :(得分:4)

使用Decimal.Parse

var convertedDecimal = Decimal.Parse(dr.ToString(), NumberStyles.Any);

dr.ToString()会返回一个带有指数符号的数字,如:"1.5E-05"。您必须指定NumberStylesNumberStyles.Float可以使用,但您可以使用NumberStyles.Any

或者正如@JoelCoehoorn在评论中指出的那样,你可以这样做:

 var convertedDecimal = Convert.ToDecimal(dr);

因为不需要转换为字符串。

答案 1 :(得分:-1)

你暗示的问题是:

  

如何将double转换为字符串并将其解析为小数?

答案是:你不应该。解析是一个低效的过程,会打开各种潜在的错误(就像你发现的那样)。

您应该直接投射该值:

decimal percent = 0;
double dr = 0.000015;
percent = Decimal.Round((decimal)dr, 3);