2015-11-05 41 views
-2

我有以下代码:四舍五入无小数小数点不加分

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

当我写totalValue控制台,它打印5。我期望添加小数位,打印5.00totalValue,但它不:它仍然打印5

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

回答

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);只会限制小数位数为2,如果小于2则不会添加缺少的小数零。

您可以修复通过明确评估n表达式将强制创建这些数字:

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

据我所知你有一个整数值。因此,为了圆和有一个余数,试试这个代码:

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

这个代码第二行意思是:

  1. 整数值k转换为浮动静态类的

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

  3. ToString(“。00”)表示转换为字符串类型。 .ToString(".00")意味着你将永远看到是否有空值。如果你不希望看到的空值,使用此.ToString(".##");
+0

输入是* text *,而不是int。如果是,价值将不需要四舍五入。文本必须首先使用适当的文化进行解析,然后格式化为字符串。它可能类似于'1234.567'或'123,456' –

+0

@PanagiotisKanavos“voucherAmountValue的值为5,totalValue的值为5.00,但它的值为5”。据我所知,OP想在数字后添加空值。 – StepUp

2

使用

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

为什么会产生不同的东西? OP的问题是*格式化*值,而不是舍入。此外,这甚至不会围绕这个数字。如果原始数字有5位小数,结果仍然有5位小数 –

+0

@PanagiotisKanavos试一下,它确实有效。 '((5m/100)* 100).ToString()'返回'“5.00”'。 (至于你编辑的评论,是的,'数学。Round'仍然需要四舍五入过多的精度。) – hvd

+0

var voucherAmountValue = 5; var totalValue =((decimal)voucherAmountValue/100)* 100; \t \t System.Console.WriteLine(totalValue +“”); @PanagiotisKanavos:你可以试试上面的代码 –