防止十进制值四舍五入到整个

时间:2016-03-06 11:31:59

标签: c# asp.net decimal

以下代码允许值传递,例如" 349.99"进入计算。我现在唯一的问题是在TotalPrice文本框中填充的最终值仍然四舍五入到最接近的整数。

对以下代码进行最佳更改是为了防止这种情况发生。我用它来计算账单,所以希望价值类似于" 239.39"等?

干杯 千斤顶

UpdateTotalBill()

    {
        long TotalPrice = 0;
        long TotalProducts = 0;
        foreach (DataListItem product in dlBasketItems.Items)
        {
            Label PriceLabel = product.FindControl("lblProductPrice") as Label;
            TextBox ProductQuantity = product.FindControl("txtProductQuantity") as TextBox;

            long ProductPrice;
            {
               ProductPrice = Convert.ToInt64(PriceLabel.Text) *
                    Convert.ToInt64(ProductQuantity.Text);
            }

            TotalPrice = TotalPrice + ProductPrice;
            TotalProducts = TotalProducts + Convert.ToInt32(ProductQuantity.Text);
         }
        txtTotalPrice.Text = Convert.ToString(TotalPrice);
        txtTotalProducts.Text = Convert.ToString(TotalProducts);
    }    

1 个答案:

答案 0 :(得分:3)

您的变量类型为long,并且您还使用Convert.ToInt64 ..这是您丢失数字小数部分的两个地方。

因此,您应该拥有decimal个变量,而是使用Convert.ToDecimal

 {
            decimal TotalPrice = 0.0;
            decimal TotalProducts = 0.0;
            foreach (DataListItem product in dlBasketItems.Items)
            {
                Label PriceLabel = product.FindControl("lblProductPrice") as Label;
                TextBox ProductQuantity = product.FindControl("txtProductQuantity") as TextBox;


                decimal ProductPrice = Convert.ToDecimal(PriceLabel.Text) *
                    Convert.ToInt32(ProductQuantity.Text);                    

                TotalPrice = TotalPrice + ProductPrice;
                TotalProducts = TotalProducts + Convert.ToInt32(ProductQuantity.Text);
             }
            txtTotalPrice.Text = Convert.ToString(TotalPrice);
            txtTotalProducts.Text = Convert.ToString(TotalProducts);
        }    

在原始示例中,您还将Convert.ToDecimal / Int64 / Int32混合用于txtproductQuantity转换。您可能只想允许整数在此字段中,因此您只能使用Convert.ToInt32(或者甚至更小的类型,具体取决于您的数字)