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

Posted

技术标签:

【中文标题】将具有科学计数法的字符串列表转换为十进制数【英文标题】:Convert list of strings with scientific notation to decimal numbers 【发布时间】:2020-08-18 09:27:35 【问题描述】:

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

    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

任何想法为什么会发生这种情况以及如何解决它?

【问题讨论】:

哦,我没注意到。指定 CultureInfo 有效,谢谢! 【参考方案1】:

您似乎有一个 CurrentCulture ,其中 '.'不是小数分隔符。所以 7.6923076920E-10 与 76923076920E-10 相同。尝试在解析时指定 CultureInfo.InvariantCulture:

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

【讨论】:

【参考方案2】:

如果你不关心全球化,你可以声明你自己的 NumberFormatInfo

var nfi = new NumberFormatInfo();

所以如果您输入的小数点分隔符是“.”或","你可以设置在

nfi.NumberDecimalSeparator

然后就可以使用了

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

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

【讨论】:

以上是关于将具有科学计数法的字符串列表转换为十进制数的主要内容,如果未能解决你的问题,请参考以下文章

将科学计数法中的数字转换为十进制[关闭]

js小数字换算科学计数法

如何使用 plink/Unix 将数据从科学计数法转换为十进制?

在python中将数组的元素从科学计数法转换为十进制计数法

js 科学计数法 转换为 数字字符 突破幂数正数21位,负数7位的自动转换限制

在bash中将科学记数法转换为十进制