您好我在下面的代码中收到了一个无效的输入字符串,我不确定如何解决它。我只是想做的是计算基本价格和总折扣。两者的输出都是£...
例如: 基本价格£148.00 折扣20英镑
如何使用double.parse和Numberstyles修复下面的代码:
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;
}
}
答案 0 :(得分: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);
正如在另一个答案中已经说过的,我还建议在处理货币值时使用decimal数据类型。它将在这些值的数学运算中给出精确的结果。另请注意,在您的上下文中(您可能在这些数字上有小数)最好使用NumberStyles.Currency来计算小数分隔符号的存在。
答案 1 :(得分:0)
尝试使用此代替double.Parse(value, NumberStyles.Currency);
intervalObj = setInterval(yourCallbackFuction, INTERVAL_TIME);
我还建议使用十进制而不是双精度,因为像0.01这样的东西实际上不能准确地存储为双精度数。