Вычисление процента от остатка по сравнению с показом стоимости в виде NaN - PullRequest
4 голосов
/ 07 июня 2019

Я пытаюсь показать процент, который остается после того, как число 1 вычтено из числа.Значения, которые я вызываю, содержат символ £ , и при выполнении кода я получаю результат 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") + "%";  

Ответы [ 2 ]

7 голосов
/ 07 июня 2019

Ну, 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 исполнение

1 голос
/ 07 июня 2019

Если SelectedQuoteForEditing.JobPrice и lblRate.Content - это две строки со знаком £ в конце / начале, например 100 £, 100 £ или 100 £.Вам просто нужно добавить .Replace("£", string.Empty) к этой переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...