2017-10-26 1 views
1

Hallo Ich erhalte in meinem Code eine ungültige Eingabezeichenfolge und ich bin mir nicht sicher, wie ich sie beheben kann. Was ich einfach versuche, ist die Berechnung des Grundpreises und des Gesamtabschlags. Der Ausgang für die beiden ist £ ...Ungültige Eingabezeichenfolge beim Versuch, eine Währungsberechnung durchzuführen

Beispiel: Grundpreis £ 148.00 Discount £ 20

Wie behebe ich den Code unten, wie ich double.parse und Number bin mit:

public double CalculateBasePriceAndTotalDiscountFromBasket(string basketLocation) 
    { 
     var basketSummaryContent = _driver.FindElements(CommonPageElements.BasketSummaryContent); 
     var totalDiscountValue = _driver.FindElements(CommonPageElements.TotalDiscountValue); 

     if (basketLocation.ToLower() == "top") 
     { 
      string basketSummaryContentText = 
       basketSummaryContent[0].FindElement(CommonPageElements.BasePriceValue).Text; 

      double basketSummaryPrice = double.Parse(basketSummaryContentText, NumberStyles.AllowCurrencySymbol); 
      double totalDiscount = double.Parse(totalDiscountValue[0].Text, NumberStyles.AllowCurrencySymbol); 

      return basketSummaryPrice - totalDiscount; 
     } 
     else 
     { 

      string basketSummaryContentText = 
       basketSummaryContent[1].FindElement(CommonPageElements.BasePriceValue).Text; 

      double basketSummaryPrice = double.Parse(basketSummaryContentText, NumberStyles.AllowCurrencySymbol); 
      double totalDiscount = double.Parse(totalDiscountValue[1].Text, NumberStyles.AllowCurrencySymbol); 

      return basketSummaryPrice - totalDiscount; 
     } 
    } 

Antwort

2

Nun, der Fehler konnte nur durch eine CultureInfo nicht für das Pfund Währungssymbol gültig erklärt werden. Sie können mit der richtigen Kultur auf dem Parsing zwingen

CultureInfo ci = new CultureInfo("en-GB"); 
double basketSummaryPrice = double.Parse(basketSummaryContentText, 
          NumberStyles.Currency, ci); 
double totalDiscount = double.Parse(totalDiscountValue[0].Text, 
          NumberStyles.Currency, ci); 

Wie schon gesagt, in einer anderen Antwort, die ich empfehlen, auch die Dezimal-Datentyp zu verwenden, wenn sie mit Währungswerten zu tun. Es wird genaue Ergebnisse in der mathematischen Operation auf diesen Werten geben. Beachten Sie auch, dass es in Ihrem Kontext (Sie könnten Dezimalstellen für diese Zahlen verwenden) besser ist, die NumberStyles.Currency zu verwenden, um auch das Vorhandensein des Dezimaltrennzeichen-Symbols zu berücksichtigen.

0

dies auch statt Doppel, sinc mit dezimal ich würde statt NumberStyles.AllowCurrencySymbol

double.Parse(value, NumberStyles.Currency); 

Versuchen empfehlen e so etwas wie 0,01 kann wirklich nicht genau als ein Doppel gespeichert werden.

Verwandte Themen