以下代码允许值传递,例如" 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);
}
答案 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(或者甚至更小的类型,具体取决于您的数字)