我试图显示从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)
好吧,double.NaN是的结果0.0 / 0.0。
0.0 / 0.0 == double.NaN
Run Code Online (Sandbox Code Playgroud)
这就是为什么这两个number和number1的0.0。代表着
double.TryParse(SelectedQuoteForEditing.JobPrice, out number);
double.TryParse(lblRate.Content.ToString().ToString(), out number1);
Run Code Online (Sandbox Code Playgroud)
无论SelectedQuoteForEditing.JobPrice是0.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.0的number,并number1和double.NaN在(number - number1) / number执行