使用 C# 中的特定提供程序将值转换为双精度
Convert value to double with specific provider in C#
我需要解析 CSV 文件、获取特定列并将值转换为双精度值。如果所有值都可以转换为双精度,我下面的代码可以正常工作:)。但是,如果值等于“TRUE”/“FALSE”,我应该如何更新代码?
代码:
dt = GetDataTableFromCsv("my_csv.csv");
// Gets the column of the dependent/indepent variable
// I need structure double [][]
var input = dt.AsEnumerable().Select(r => independentNames.Where(i => dt.Columns.Contains(i)).Select(c => Convert.ToDouble(r.Field<object>(c), provider(???))).ToArray()).ToArray();
CSV 示例:
Rank, Value, TV, IS_NEW, IS_HOME, RATINGS, ...
"1", "0.5", "CNN", "TRUE", "FALSE", "888.77" ....
- “电视”应该被忽略,它不在
independentNames
- “真”/“假”=> 1.0/0.0
如果您需要做的只是将 "TRUE"
和 "FALSE"
包装到 1.0
和 0.0
,请将逻辑分离到您自己的方法中并调用它而不是 Convert.ToDouble
。
您仍然需要在此方法或更高范围内处理无效输入。
double AsDouble(string input)
{
switch (input)
{
case "TRUE": return 1.0;
case "FALSE": return 0.0;
//any other special cases
default: return Convert.ToDouble(input); //may still throw!
}
}
我需要解析 CSV 文件、获取特定列并将值转换为双精度值。如果所有值都可以转换为双精度,我下面的代码可以正常工作:)。但是,如果值等于“TRUE”/“FALSE”,我应该如何更新代码?
代码:
dt = GetDataTableFromCsv("my_csv.csv");
// Gets the column of the dependent/indepent variable
// I need structure double [][]
var input = dt.AsEnumerable().Select(r => independentNames.Where(i => dt.Columns.Contains(i)).Select(c => Convert.ToDouble(r.Field<object>(c), provider(???))).ToArray()).ToArray();
CSV 示例:
Rank, Value, TV, IS_NEW, IS_HOME, RATINGS, ...
"1", "0.5", "CNN", "TRUE", "FALSE", "888.77" ....
- “电视”应该被忽略,它不在
independentNames
- “真”/“假”=> 1.0/0.0
如果您需要做的只是将 "TRUE"
和 "FALSE"
包装到 1.0
和 0.0
,请将逻辑分离到您自己的方法中并调用它而不是 Convert.ToDouble
。
您仍然需要在此方法或更高范围内处理无效输入。
double AsDouble(string input)
{
switch (input)
{
case "TRUE": return 1.0;
case "FALSE": return 0.0;
//any other special cases
default: return Convert.ToDouble(input); //may still throw!
}
}