【问题标题】:Use double.Parse that if Null value, then value replace with 0使用 double.Parse,如果 Null 值,则值替换为 0
【发布时间】:2016-08-12 05:23:24
【问题描述】:

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

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

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

【问题讨论】:

  • min 的类型是什么?你能分享一个完整的例子吗?
  • 错误原因是??的左边必须是可以为空的类型。 double 永远不能为空,因此将 ?? 与它一起使用是没有意义的。

标签: c# parsing double


【解决方案1】:

也许是这样,假设minstring

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

或许:

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

编辑

更好:

double final = Convert.ToDouble(min);

根据the documentation,该方法将返回

一个双精度浮点数,相当于 值中的数字,如果值为 null,则为 0(零)

【讨论】:

  • 哇,谢谢 Smarx!它有效:) 一旦堆栈溢出允许我将其标记为已回答。
【解决方案2】:

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

在您的代码中:

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

您正在使用称为Null-coalescing operator?? 运算符,该运算符的作用是检查double.Parse(min.ToString()) __evaluates to a value 的类型是否为double(这是一个值类型)_ 是否为空。如果不为空,则将值分配给final,否则将其分配给0.0

由于double 是一个值类型,一个值类型的变量不能为空,除非它们是Nullable,你会得到一个错误,这就是你得到这个错误的原因:

“运算符'??'不能应用于 'double' 和 'double' 类型的操作数。”

要解决这个问题,你可以试试这个:

 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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多