我正在使用Kentico API在我的网站上显示我的产品,但在显示购物车总价格时我遇到了问题。它会自动舍入 - 如果价格为11.5则为12。
以下是我返回总价的方法:
public double GetTotalShoppingCart(int userID, string siteName)
{
double totalPrice=0.0;
ShoppingCartInfo cartInfo = GetShopCard(userID, siteName);
int siteID = GetSite(siteName);
if (cartInfo != null)
{
DataSet cartItems = ShoppingCartItemInfoProvider.GetShoppingCartItems(cartInfo.ShoppingCartID);
if (cartItems.Tables[0].Rows.Count > 0)
{
foreach (DataRow row in cartItems.Tables[0].Rows)
{
totalPrice += ShoppingCartItemInfoProvider.GetShoppingCartItemInfo(int.Parse(row["CartItemID"].ToString())).TotalPrice;
}
}
}
return totalPrice;
}
只有当它是整数或实数时才会返回正确的总价格,但如果它包含任何分数,则会将其四舍五入为最高数字。你知道造成这个问题的原因吗?
答案 0 :(得分:1)
我尝试使用十进制,但它也无法正常工作,所以我自己计算总价格,如:
public decimal GetTotalShoppingCart(int userID, string siteName)
{
decimal totalPrice=0;
ShoppingCartInfo cartInfo = GetShopCard(userID, siteName);
int siteID = GetSite(siteName);
if (cartInfo != null)
{
DataSet cartItems = ShoppingCartItemInfoProvider.GetShoppingCartItems(cartInfo.ShoppingCartID);
if (cartItems.Tables[0].Rows.Count > 0)
{
foreach (DataRow row in cartItems.Tables[0].Rows)
{
totalPrice += decimal.Parse(row["SKUUnits"].ToString()) * decimal.Parse(row["SKUPrice"].ToString());//(decimal)ShoppingCartItemInfoProvider.GetShoppingCartItemInfo(int.Parse(row["CartItemID"].ToString())).TotalPrice;
}
}
}
return totalPrice;
}
非常感谢您的帮助:)
答案 1 :(得分:0)
@Ksib提出了使用decimal
替换double
的好处。十进制将为您提供更高的精度。此外,将价格表示为数字字符串,格式为货币。有关详细说明,请参阅MSDN decimal和double条目中的备注。 MSDN的数字格式信息为here。
答案 2 :(得分:0)
如果以下内容未更改数据的查看方式,则您必须自行更改视图。
public decimal GetTotalShoppingCart(int userID, string siteName)
{
decimal totalPrice = 0;
ShoppingCartInfo cartInfo = GetShopCard(userID, siteName);
// Not sure what siteID is used for here...
int siteID = GetSite(siteName);
if (cartInfo != null)
{
if (cartItems.Tables[0].Rows.Count > 0)
{
foreach (DataRow row in cartItems.Tables[0].Rows)
{
totalPrice += (decimal)ShoppingCartItemInfoProvider.GetShoppingCartItemInfo(int.Parse(row["CartItemID"].ToString())).TotalPrice;
}
}
}
return totalPrice;
}
答案 3 :(得分:0)
问题是int.parse。无论什么东西都会返回一个整数。尝试使用Kentico ValidationHelper类并获取double或decimal值,或者您可以使用与decimal.parse等相同的语法。