将具有科学计数法的字符串列表转换为十进制数字

问题描述

我有一个字符串列表(带有科学计数法的数字),我想将其转换为实数;我的想法是使用循环将其转换:

    for (var i = 0; i < time.Count; i++)
    {
        timeD.Add(decimal.Parse(time[i],System.Globalization.NumberStyles.Any));
    }

,但是输出数字的值是错误的。我的列表的值是:

7.6923076920E-10
1.5384615380E-09
3.2051282050E-09
4.8717948720E-09

输出

7,6923076920
15,384615380
32,051282050
48,717948720

有什么想法为什么会发生以及如何解决

解决方法

似乎您在CurrentCulture中将“。”不是小数点分隔符。因此7.6923076920E-10与76923076920E-10相同。尝试在解析时指定CultureInfo.InvariantCulture:

 decimal.Parse(time[i],System.Globalization.NumberStyles.Any,CultureInfo.InvariantCulture)
,

如果您不关心全球化,则可以声明自己拥有NumberFormatInfo

var nfi = new NumberFormatInfo();

因此,如果您输入的小数点分隔符为“。”或“,”您可以在其中设置

nfi.NumberDecimalSeparator

然后您就可以使用

var num = decimal.Parse(time[i],nfi);

CultureInfo.InvariantCulture始终假定小数点分隔符为“。”