以NaN计算剩余成本显示结果的百分比

use*_*959 4 c# wpf

我试图显示从number中减去number1之后剩下的百分比。我正在调用的值包含一个£符号,当运行代码时,我得到NaN的结果,我猜想这与£符号有关,因为删除百分比后会显示该符号。有人知道我该如何解决吗?我已经尝试了好几个小时没有运气:(预先感谢。

double number;  
double number1;  
double result;  

double.TryParse(SelectedQuoteForEditing.JobPrice, out number);  
double.TryParse(lblRate.Content.ToString().ToString(), out number1);  

var left = Math.Round((number - number1) / number * 100, 2);  

result = left;  

ERGPerc.Content = result.ToString("P") + "%";  
Run Code Online (Sandbox Code Playgroud)

Dmi*_*nko 7

好吧,double.NaN是的结果0.0 / 0.0

0.0 / 0.0 == double.NaN
Run Code Online (Sandbox Code Playgroud)

这就是为什么这两个numbernumber10.0。代表着

double.TryParse(SelectedQuoteForEditing.JobPrice, out number);   
double.TryParse(lblRate.Content.ToString().ToString(), out number1);  
Run Code Online (Sandbox Code Playgroud)

无论SelectedQuoteForEditing.JobPrice0.0或无效(比如,空字符串)和相同的lblRate.Content.ToString().ToString()

检查double.TryParse返回值:

if (double.TryParse(SelectedQuoteForEditing.JobPrice, out number) &&  
    double.TryParse(lblRate.Content.ToString(), out number1) {

  var left = Math.Round((number - number1) / number * 100, 2);  
  ERGPerc.Content = left.ToString("P") + "%"; 
}  
else {
  // at least one value is invalid
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果要解析货币,说GB一个(请参阅£150.00注释),则必须让系统知道它:

double.TryParse(SelectedQuoteForEditing.JobPrice, 
  NumberStyles.Any,                    // allow currency symbols
  CultureInfo.GetCultureInfo("en-GB"), // which currency? GB 
  out number);    

double.TryParse(lblRate.Content.ToString(), 
  NumberStyles.Any,                    // allow currency symbols
  CultureInfo.GetCultureInfo("en-GB"), // which currency? GB 
  out number1);             
Run Code Online (Sandbox Code Playgroud)

否则Parse失败(什么£它做的手段?浮点值的不正确的部分!),你会得到0.0number,并number1double.NaN(number - number1) / number执行

  • @ user8329959:如果您不仅要解析浮点值(例如,“ 150.00”),还要解析* currency *(“£150.00”),则应让系统知道这一点。查看我的编辑 (3认同)