繁体   English   中英

拆分和转换字符串为双C#

[英]Split and Convert string to double C#

我想将字符串转换为double。

这是我做的例子:

string line = "4.1;4.0;4.0;3.8;4.0;4.3;4.2;4.0;"; 

double[] values = line2.Split(';').Select(double.Parse).ToArray();

但是出现错误

输入字符串的格式不正确。

当我尝试

string line2 = "1;2;3;4;5;6;7;8;9;10;11;12";

double[] values = line2.Split(';').Select(double.Parse).ToArray();

它工作得很好。

双值的输入格式应该是什么?

您的问题是第一个输入中的最后一个分号。 double.Parse方法传递一个空字符串。 double value2 = double.Parse(""); 有几种方法可以解决这个问题,我将在这里概述两个:

  1. 检查输入中的最后一个字符是否是分号,如果是,则将其删除。 (这应该是自我解释的。)

  2. 使用StringSplitOptions.RemoveEmptyEntries重载。

我更喜欢第二种选择,我自己。 因为这也消除了连续两个分号的问题。

string line = "4.1;4.0;4.0;3.8;4.0;;4.3;4.2;4.0;";
double[] values = line.Split(new char[]{';'}, StringSplitOptions.RemoveEmptyEntries).Select(double.Parse).ToArray();

此外,只是为了幽默这个想法,它也可能是一个文化问题; 以下代码针对特定于文化的方案进行了调整。 if检查的原因是节省计算时间。 如果您愿意,可以将其删除,不会对整体影响造成伤害。 (它只是意味着该计划将取代..在程序与文化的一套用于分隔小数在计算机上运行的情况。这仅仅是一个简单的优化。)

string line = "4.1;4.0;4.0;3.8;4.0;;4.3;4.2;4.0;";

if (CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator != ".")
    line = line.Replace(".", CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);

double[] values = line.Split(new char[]{';'}, StringSplitOptions.RemoveEmptyEntries).Select(s => double.Parse(s)).ToArray();

关于文化问题可能性的另一个侧边栏:如果它一个文化问题,那么操作就不会抛出异常,而是简单地返回数字的每个数字而不使用分隔符。 (即41, 40, 40, 38, 40, 43, 42, 40

其他选择:

  1. 请改用double.TryParse

  2. 使用自定义for循环并手动解析数据。

还有其他选择,我无法想到。

另一种选择是对split数组中的每个项使用double.TryParse()方法。 这将确保在尝试将其添加到values数组之前,数组中的每个项(空或不是)都是有效的double。

例如:

string line = "4.1;4.0;4.0;3.8;4.0;4.3;4.2;4.0;";

double temp = 0;

double[] values = line.Split(';')
    .Where(item => double.TryParse(item, out temp))
    .Select(i => temp).ToArray();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM