我有以下代码:四舍五入无小数小数点不加分
var voucherAmountValue = "5";
var totalValue = Math.Round(Convert.ToDecimal(voucherAmountValue), 2);
当我写totalValue
控制台,它打印5
。我期望添加小数位,打印5.00
为totalValue
,但它不:它仍然打印5
。
如何将小数位添加到没有它们的小数?
我有以下代码:四舍五入无小数小数点不加分
var voucherAmountValue = "5";
var totalValue = Math.Round(Convert.ToDecimal(voucherAmountValue), 2);
当我写totalValue
控制台,它打印5
。我期望添加小数位,打印5.00
为totalValue
,但它不:它仍然打印5
。
如何将小数位添加到没有它们的小数?
这里的问题是,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);
据我所知你有一个整数值。因此,为了圆和有一个余数,试试这个代码:
int k = 5;
var totalValue = Math.Round(Convert.ToDecimal(k)).ToString(".00");
这个代码第二行意思是:
整数值k
转换为浮动静态类的
Round()
方法Math
将值舍入为最接近的整数或指定的小数位数。
.ToString(".00")
意味着你将永远看到是否有空值。如果你不希望看到的空值,使用此.ToString(".##");
使用
var totalValue = ((decimal)voucherAmountValue/100)*100;
为什么会产生不同的东西? OP的问题是*格式化*值,而不是舍入。此外,这甚至不会围绕这个数字。如果原始数字有5位小数,结果仍然有5位小数 –
@PanagiotisKanavos试一下,它确实有效。 '((5m/100)* 100).ToString()'返回'“5.00”'。 (至于你编辑的评论,是的,'数学。Round'仍然需要四舍五入过多的精度。) – hvd
var voucherAmountValue = 5; var totalValue =((decimal)voucherAmountValue/100)* 100; \t \t System.Console.WriteLine(totalValue +“”); @PanagiotisKanavos:你可以试试上面的代码 –
输入是* text *,而不是int。如果是,价值将不需要四舍五入。文本必须首先使用适当的文化进行解析,然后格式化为字符串。它可能类似于'1234.567'或'123,456' –
@PanagiotisKanavos“voucherAmountValue的值为5,totalValue的值为5.00,但它的值为5”。据我所知,OP想在数字后添加空值。 – StepUp