繁体   English   中英

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

[英]Use double.Parse that if Null value, then value replace with 0

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

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

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

也许这个,假设min是一个string

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

也许:

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

编辑

更好的是:

double final = Convert.ToDouble(min);

根据文档 ,该方法将返回

双精度浮点数,等于值中的数字, 如果value为null,则为0(零)

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

在你的代码中:

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

你在用?? 调用Null-coalescing运算符的运算符以及此运算符执行的操作是检查double.Parse(min.ToString()) __evaluates值是否为double类型(值为类型)_是否为null。 如果它不为null,则将值赋给final ,否则为其赋值0.0

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

“接线员'??' 不能应用于'double'和'double'类型的操作数。“

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

 double final = Convert.ToDouble(min);

如果min为null,则返回零。

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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM