Ну, double.NaN
- это результат 0.0 / 0.0
.
0.0 / 0.0 == double.NaN
, поэтому number
и number1
равны 0.0
.Это означает, что
double.TryParse(SelectedQuoteForEditing.JobPrice, out number);
double.TryParse(lblRate.Content.ToString().ToString(), out number1);
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
}
Редактировать: Если вы хотите проанализировать валюту , скажем 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);
в противном случае Parse
завершится неудачно (что означает £
? Это не исправляет часть значения с плавающей запятой!), вы получите 0.0
для number
и number1
и double.NaN
на (number - number1) / number
исполнение