将具有科学记数法的字符串列表转换为十进制数
Convert list of strings with scientific notation to decimal numbers
我有一个字符串列表(带科学记数法的数字),我想将它转换为实数;我的想法是使用循环转换它:
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 总是假定小数点分隔符是“.”
我有一个字符串列表(带科学记数法的数字),我想将它转换为实数;我的想法是使用循环转换它:
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 总是假定小数点分隔符是“.”