舍入小数而不包含分数不会添加分数

时间:2015-11-05 11:25:35

标签: c# decimal

我有以下代码:

var voucherAmountValue = "5";
var totalValue = Math.Round(Convert.ToDecimal(voucherAmountValue), 2);

当我将totalValue写入控制台时,会打印5。我希望添加小数位数,为5.00打印totalValue,但它不会:它仍会打印5

如何将小数位数添加到没有小数位的小数位?

3 个答案:

答案 0 :(得分:3)

这里的问题是Math.Round不会添加小数位,只有限制它们。

测试一下:

decimal a = 5m;
decimal b = Math.Round(a, 2); // b will be 5
a = 5.00m;
b = Math.Round(a, 3); // b will be 5,00 (not 5,000)
b = Math.Round(a, 2); // b will be 5,00
b = Math.Round(a, 1); // b will be 5,0

如您所见,如果原始字符串仅包含"5",则小数值也只是5,而调用Math.Round(..., 2);只会限制小数位 down 为2,如果小于2,则不会添加缺失的小数零。

您可以通过显式评估将强制创建这些数字的表达式来修复

var totalValue = Math.Round((Convert.ToDecimal(voucherAmountValue) / 100.0m) * 100.0m, 2);

答案 1 :(得分:2)

使用

var totalValue = ((decimal)voucherAmountValue/100)*100;

答案 2 :(得分:0)

据我所知,你有一个整数值。所以要舍入并有余数,请尝试以下代码:

int k = 5;
var totalValue = Math.Round(Convert.ToDecimal(k)).ToString(".00");

第二行代码表示:

  1. 整数值k转换为float

  2. Round()静态类Math的方法将值舍入到最接近的整数或指定的小数位数。

  3. ToString(“。00”)表示转换为字符串类型。 .ToString(".00")表示您将始终查看是否存在空值。如果您不想看到空值,请使用此.ToString(".##");