我想用这个Math.Round
功能做到这一点
以下是一些例子:
decimal a = 1.994444M; Math.Round(a, 2); //returns 1.99 decimal b = 1.995555M; Math.Round(b, 2); //returns 2.00
您可能还希望看看银行家四舍五入/舍入到以下过载:
Math.Round(a, 2, MidpointRounding.ToEven);
有一个关于它的更多信息在这里.
试试这个:
twoDec = Math.Round(val, 2)
就个人而言,我永远不会圆.保持尽可能坚决,因为无论如何,舍入在CS中都是一个红色的鲱鱼.但您确实希望为用户格式化数据,为此,我发现这string.Format("{0:0.00}", number)
是一种很好的方法.
如果你想要一个字符串
> (1.7289).ToString("#.##") "1.73"
或小数
> Math.Round((Decimal)x, 2) 1.73m
但要记住!舍入不是分配的,即.round(x*y) != round(x) * round(y)
.因此,在计算结束之前不要进行任何舍入,否则你将失去准确性.
维基百科有一个关于四舍五入的好页面.
所有.NET(托管)语言都可以使用任何公共语言运行时(CLR)舍入机制.例如,Math.Round()(如上所述)方法允许开发人员指定舍入类型(Round-to-even或Away-from-zero).Convert.ToInt32()方法及其变体使用round-to-even.该天花板()和地面()方法是相关的.
您也可以使用自定义数字格式进行舍入.
请注意,Decimal.Round()使用的方法与Math.Round()不同;
这是银行家舍入算法的有用位置.看看雷蒙德在这里关于四舍五入的幽默帖子之一......
//最多转换两位小数
String.Format("{0:0.00}", 140.6767554); // "140.67" String.Format("{0:0.00}", 140.1); // "140.10" String.Format("{0:0.00}", 140); // "140.00" Double d = 140.6767554; Double dc = Math.Round((Double)d, 2); // 140.67 decimal d = 140.6767554M; decimal dc = Math.Round(d, 2); // 140.67
=========
// just two decimal places String.Format("{0:0.##}", 123.4567); // "123.46" String.Format("{0:0.##}", 123.4); // "123.4" String.Format("{0:0.##}", 123.0); // "123"
也可以将"0"与"#"组合.
String.Format("{0:0.0#}", 123.4567) // "123.46" String.Format("{0:0.0#}", 123.4) // "123.4" String.Format("{0:0.0#}", 123.0) // "123.0"
我知道这是一个老问题,但请注意Math Round和String格式之间的以下区别:
decimal d1 = (decimal)1.125; Math.Round(d1, 2).Dump(); // returns 1.12 d1.ToString("#.##").Dump(); // returns "1.13" decimal d2 = (decimal)1.1251; Math.Round(d2, 2).Dump(); // returns 1.13 d2.ToString("#.##").Dump(); // returns "1.13"
这是为了在C#中舍入到2位小数:
label8.Text = valor_cuota .ToString("N2") ;
在VB.NET中:
Imports System.Math round(label8.text,2)