当前位置:  开发笔记 > 编程语言 > 正文

你如何在C#中将数字四舍五入到小数点后两位?

如何解决《你如何在C#中将数字四舍五入到小数点后两位?》经验,为你挑选了8个好方法。

我想用这个Math.Round功能做到这一点



1> Eoin Campbel..:

以下是一些例子:

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);

有一个关于它的更多信息在这里.


您应该澄清MidPointRounding.ToEven是默认值.如果你想要AwayFromZero,你将不得不使用重载
如果你想**向上舍入**到2位小数,请在舍入前将数字加上"0.005".同样地向**舍入**,在传递给`Math.Round`函数之前减去`0.005`.
.NET默认为"MidPointRounding.ToEven"(又名"Bankers Rounding")的原因是因为我们都学会在学校里进行四舍五入.5轮向上导致过多的四舍五入.在处理金钱,税收计算等时,这是一个问题.

2> John Boker..:

试试这个:

twoDec = Math.Round(val, 2)



3> Gleno..:

就个人而言,我永远不会圆.保持尽可能坚决,因为无论如何,舍入在CS中都是一个红色的鲱鱼.但您确实希望为用户格式化数据,为此,我发现这string.Format("{0:0.00}", number)是一种很好的方法.


@FrenkyB当你说'方括号'时,我希望你的意思是大括号.

4> Colonel Pani..:

如果你想要一个字符串

> (1.7289).ToString("#.##")
"1.73"

或小数

> Math.Round((Decimal)x, 2)
1.73m

但要记住!舍入不是分配的,即.round(x*y) != round(x) * round(y).因此,在计算结束之前不要进行任何舍入,否则你将失去准确性.



5> Foredecker..:

维基百科有一个关于四舍五入的好页面.

所有.NET(托管)语言都可以使用任何公共语言运行时(CLR)舍入机制.例如,Math.Round()(如上所述)方法允许开发人员指定舍入类型(Round-to-even或Away-from-zero).Convert.ToInt32()方法及其变体使用round-to-even.该天花板()和地面()方法是相关的.

您也可以使用自定义数字格式进行舍入.

请注意,Decimal.Round()使用的方法与Math.Round()不同;

这是银行家舍入算法的有用位置.看看雷蒙德在这里关于四舍五入的幽默帖子之一......



6> Rae Lee..:

//最多转换两位小数

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"



7> Guy..:

我知道这是一个老问题,但请注意Math RoundString格式之间的以下区别:

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"



8> 小智..:

这是为了在C#中舍入到2位小数:

label8.Text = valor_cuota .ToString("N2") ;

在VB.NET中:

 Imports System.Math
 round(label8.text,2)

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有