C#将列表框项转换为双精度
我正在尝试将foreach中的C#将列表框项转换为双精度,c#,string,listbox,double,C#,String,Listbox,Double,我正在尝试将foreach中的列表框.item转换为double,但它不起作用: foreach (string row in listBoxOperation1.Items) { double x = Convert.ToDouble(row); } 我还尝试了Double.Parse和Double.TryParse,但总是返回:输入字符串的格式不正确 如果我加上: listBoxProgram.Items.Add(row); 它给出了以下值: 3999.0 3333.33 111
列表框.item
转换为double,但它不起作用:
foreach (string row in listBoxOperation1.Items)
{
double x = Convert.ToDouble(row);
}
我还尝试了Double.Parse
和Double.TryParse
,但总是返回:输入字符串的格式不正确
如果我加上:
listBoxProgram.Items.Add(row);
它给出了以下值:
3999.0
3333.33
1111.11
666.66
好吧,如果您将它们添加为
double
,您只需将它们转换为:
double x = (double) row;
如果已将它们添加为字符串,则可能不使用
作为十进制分隔符,而是使用,
。提供正确的CultureInfo
,例如en-US
:
CultureInfo usCult = new CultureInfo("en-US");
double x;
string numberStr = (string) row;
bool validNumber = double.TryParse(numberStr, NumberStyles.Any, usCult, out x);
如果格式无效,
validNumber
将为false
,否则x
将包含该值。我猜。如果行的类型为System.Data.DataRow
,则当然不能将其转换为double
<代码>数据行不能转换为双精度。首先必须获取存储在特定列中的值
foreach (DataRow row in listBoxOperation1.Items) {
object obj = row["MyColumn"];
...
}
现在,如果该项的类型为double,则可以将其强制转换为:
var d = (double)obj;
如果它是string类型,则需要将其转换为double
if (Double.TryParse((string)obj, out double d)) {
// We have a double d.
} else {
// Something went wrong (e.g. the column is empty).
}
在任何情况下,此行中的行的类型
都是必不可少的:
listBoxProgram.Items.Add(row); // Of which type is 'row'?
那么,输入字符串是什么?什么是
行
?如果它是一个对象,row.ToString()
会给你什么?只是猜测一下,它可能与区域性相关,请使用Double.TryParse
尝试InvariantCulture
。在中为每个对象使用listBoxOperation1,而在添加中使用listBoxProgram。这是故意的吗?row.ToString()给出了相同的错误。输入应该是一个字符串,它从一个文本文件读取到一个列表框中,然后我尝试使用这些值,并将它们按不同的目的进行排序。只使用点,将textbox转换为Double不是问题。具有相同值的文本是列表框,行是对象。如果这个对象是一个DataRow
,列表框将为每个项目显示System.Data.DataRow
,因为DataRow
不会覆盖ToString
。我得到var“row=(DataRow)item;”,然后我得到错误“无法将System.String转换为System.DataRow”正如你所知道的,我在C#方面有点新手。你从foreach循环中的listBoxOperation1.items
中检索的项目与你用listBoxProgram.items.Add(行)添加到其中的项目具有相同的类型代码>。因此,我们需要知道您是如何在listBoxProgram.Items.Add(row)中声明row
变量的代码>。行
有哪种类型?请出示行的声明
。是双排代码>或字符串行
或数据行行
或其他内容?它们作为字符串添加,但问题在于上面的答案中所述的十进制分隔符。由于某些原因,它在foreach循环和列表框中有问题,我在文本框中对此没有问题。非常感谢!这就解决了问题。我还添加了使用系统。全球化;