2017-10-26 7 views
1

こんにちは私のコードで無効な入力文字列が得られましたが、修正方法は不明です。私が単にやろうとしているのは、基本価格と合計割引を計算することです。例えば£...通貨計算を実行しようとしたときに入力文字列が無効です

の両方のための出力:

: ベース価格£148.00 ディスカウント私はdouble.parseとNumberstylesを使用していて、私は下のコードを修正するにはどうすればよい£20

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; 
     } 
    } 

答えて

2

まあ、このエラーは、CultureInfoがポンド通貨記号に対して有効ではないと説明することしかできませんでした。あなたには、すでに私はまた、通貨の値を扱うとき、小数点データ型を使用することをお勧めします別の答えに言っ

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

であなたの構文解析に正しい文化を強制することができます。これらの値に対する数学的演算の正確な結果が得られます。また、あなたの文脈(これらの数字に小数点以下の桁数を持つことができる)に注意してください。NumberStyles.Currencyを使用して、小数点記号の存在をも説明する方が良いです。

0

はこれを試してみてください代わりにNumberStyles.AllowCurrencySymbol

double.Parse(value, NumberStyles.Currency); 

私はまた、小数の代わりに、二重を使用してシンクをお勧めします0.01のようなものは本当に倍精度として正確に格納することはできません。

関連する問題