C#中double类型方法如何返回字符串“-”?现有代码报错求助
问题根源
你当前的核心矛盾是Percent属性的返回类型为double——这是数值类型,只能存储有效数值,根本无法返回字符串“-”。Convert.ToDouble("-")报错,就是因为这个字符串无法转换成有效的双精度数值。
解决方案
方案1:修改属性返回类型为string(直接返回显示文本)
如果你的需求是直接获取用于展示的文本,把返回类型改成string是最直接的解决方式,同时还要修正原代码里判断NaN的错误(不能用== Double.NaN,必须用double.IsNaN()):
public string Percent { get { if (TotalTime != 0) { double percentage = (double)Completion / (double)TotalTime; // NaN和任何值比较都是false,必须用double.IsNaN判断 return double.IsNaN(percentage) ? "0" : percentage.ToString(); } else { return "-"; } } }
方案2:保留double返回类型,用特殊值标记,在显示层处理
如果业务逻辑要求必须保留double类型(比如后续需要数值计算),可以用double.NaN作为“无有效值”的标记,然后在需要展示的地方判断并替换成“-”:
public double Percent { get { if (TotalTime != 0) { double percentage = (double)Completion / (double)TotalTime; return double.IsNaN(percentage) ? 0 : percentage; } else { // 返回NaN作为无有效值的标记 return double.NaN; } } }
后续显示时处理示例:
// 获取属性值后,在显示环节转换文本 var percentValue = yourObject.Percent; string displayText = double.IsNaN(percentValue) ? "-" : percentValue.ToString();
额外注意点
原代码里if (percentage == Double.NaN)的写法是错误的——NaN的特性是不等于任何值(包括它自己),永远不会触发这个判断,必须用double.IsNaN(percentage)来检测是否为NaN。
内容的提问来源于stack exchange,提问作者user16934174
相关产品推荐
相关产品推荐

