购物车在Kentico的总价格问题

时间:2016-05-16 14:38:16

标签: c# kentico

我正在使用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;
    }

只有当它是整数或实数时才会返回正确的总价格,但如果它包含任何分数,则会将其四舍五入为最高数字。你知道造成这个问题的原因吗?

4 个答案:

答案 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 decimaldouble条目中的备注。 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等相同的语法。