使用double.Parse表示如果为Null值,则将值替换为0

时间:2016-07-15 23:59:31

标签: c# parsing double

我试图将字符串转换为double。如果遇到空值,则该值应为0(零)。但是,它会出现一条错误消息:

"运营商''不能应用于' double'类型的操作数和' double'。这有点令人困惑,因为这两个数字都是双倍的?我该如何解决这个问题?

double final = double.Parse(min.ToString()) ?? 0.0;

2 个答案:

答案 0 :(得分:8)

也许这样,假设minstring

double final = double.Parse(min ?? "0");

或者也许:

double final = (min == null) ? 0 : double.Parse(min);

修改

更好:

double final = Convert.ToDouble(min);

the documentation,该方法将返回

  

一个双精度浮点数,相当于   数值,或0(零)如果值为空

答案 1 :(得分:0)

出现此错误是因为左侧?必须是Nullable类型,可以将 null 作为值。

你的代码中的

double final = double.Parse(min.ToString()) ?? 0.0;

您正在使用调用Null-coalescing operator??运算符,此运算符执行的操作是检查double.Parse(min.ToString()) __评估某个值是否为double的类型(这是一个值) type)_是否为null。如果它不为空,则将值分配给final,否则将0.0分配给它。

由于double是值类型而值类型变量不能为空,除非它们是Nullable,否则您将收到错误,这就是您收到此错误的原因:< / p>

&#34;运营商&#39;&#39;不能应用于&#39; double&#39;类型的操作数和&#39; double&#39;。&#34;

要解决此问题,您可以尝试:

 double final = Convert.ToDouble(min);

如果min为空,则返回零。

PS:尽量避免使用Parse方法,该方法在解析失败时抛出System.FormatExceptoin,而是使用TryParse

string min = "2.s"; // not a number
double finals;
bool successed =  double.TryParse(min, out finals); // true if successed, otherwise false.
Console.WriteLine(successed? $"Yes! finals =  {finals}": $"No :( finals =  {finals}");
// finals is 0 if the parse didn't work.