C#>当input =“”时将字符串转换为double

时间:2011-02-15 22:52:10

标签: c# .net parsing

我想将字符串转换为double(非常基本的问题不是吗?)

string input = "45.00000";
double numberd = Double.Parse(input, CultureInfo.InvariantCulture);

=>我的代码有效,我很高兴。

但是我可能有以下

string input = "";
double numberd = Double.Parse(input, CultureInfo.InvariantCulture);

在这种情况下,我的代码不起作用,我收到异常错误;( 我想知道如何处理这种情况。理想情况下,当我得到这个时,我希望我的变量 numberd 等于null。

任何人都可以帮助我吗? THX

7 个答案:

答案 0 :(得分:5)

Microsoft建议使用Tester-Doer模式,如下所示:

string input = "";
double numberd;
if( Double.TryParse(input, out numberd) )
{
    // number parsed!
}

答案 1 :(得分:3)

使用Double进行解析,但可能使用Double?来存储值?

Double number;
string input = ""; // just for demo purpose, naturally ;o)
Double? nullableNumber = 
    Double.TryParse(input, NumberStyles.Any, CultureInfo.InvariantCulture, out number) 
    ? (Double?)number 
    : null;

// use nullableNumber

答案 2 :(得分:1)

double等原始类型不能为空。您可以拥有double?的可空版本,但Double.Parse不会返回double?(只是普通double)。

您可以使用Double.TryParse并检查返回条件并将double?设置为null,如果这更适合。

答案 3 :(得分:1)

为什么不抓住异常并设置变量?

double numberd;
try {
  numberd = Double.Parse(input, CultureInfo.InvariantCulture);
} catch (System.FormatException e)
  numberd = 0.0;
}

或者,您可以使用Double.TryParse

答案 4 :(得分:0)

添加if语句,将字符串或环绕声与try / catch块进行比较。

答案 5 :(得分:0)

假设你不担心除空字符串之外的其他无效值,这里有一个简单的单行:

Double? numberd = (input.Length == 0) ? null : (Double?)Double.Parse(input, CultureInfo.InvariantCulture);
mzabsky在正确的道路上,但他的解决方案不会构建,你不应该硬编码空字符串 - 最好检查字符串的长度。

答案 6 :(得分:0)

怎么样

Double? numberd = String.IsNullOrEmpty(str) ? null : Double.Parse(str)

在我的应用程序中,我正在解析CSV文件,我希望这些空字符串为零,所以我返回0.0而不是null,这一切都很好。

5 more