gpt4 book ai didi

c# - 拆分字符串并将其转换为双 C#

转载 作者:太空狗 更新时间:2023-10-30 00:51:02 25 4
gpt4 key购买 nike

我想将字符串转换为 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();

但是出现错误

Input string was not in a correct format.

当我尝试

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

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

它工作得很好。

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

最佳答案

您的问题是第一个输入中的最后一个分号。 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循环并手动解析您的数据。

可能还有其他我想不到的选择。

关于c# - 拆分字符串并将其转换为双 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30305025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com