将变量舍入到两个小数位C#

Ker*_*y G 42 c# variables decimal rounding

可能重复:
如何将数字四舍五入到C#中的两位小数?

我感兴趣的是如何将变量舍入到两位小数.在下面的示例中,奖金通常是带小数点后四位的数字.有没有办法确保薪酬变量总是四舍五入到小数点后两位?

  pay = 200 + bonus;
  Console.WriteLine(pay);
Run Code Online (Sandbox Code Playgroud)

Hab*_*bib 83

使用Math.Round并指定小数位数.

Math.Round(pay,2);
Run Code Online (Sandbox Code Playgroud)

Math.Round方法(Double,Int32)

双精度浮点值舍入到指定的小数位数.

Math.Round方法(十进制,Int32)

将十进制值舍入到指定数量的小数位.

  • 称之为`pay = Math.Round(pay,2);` (4认同)
  • 重要提示:这会将 0.005 舍入为 0.00!看看下面乔恩的答案,这应该是最重要的答案。 (2认同)

Jon*_*yna 25

你应该使用一种形式Math.Round.请注意,Math.Round除非您指定MidpointRounding值,否则默认为银行家的舍入(舍入到最接近的偶数).如果您不想使用银行家的舍入,您应该使用Math.Round(decimal d, int decimals, MidpointRounding mode),如下所示:

Math.Round(pay, 2, MidpointRounding.AwayFromZero); // .005 rounds up to 0.01
Math.Round(pay, 2, MidpointRounding.ToEven);       // .005 rounds to nearest even (0.00) 
Math.Round(pay, 2);    // Defaults to MidpointRounding.ToEven
Run Code Online (Sandbox Code Playgroud)

(为什么.NET使用银行家的四舍五入?)


Agh*_*oub 5

decimal pay  = 1.994444M;

Math.Round(pay , 2); 
Run Code Online (Sandbox Code Playgroud)


Pau*_*ann 5

您可以对结果进行舍入并用于string.Format设置精度,如下所示:

decimal pay = 200.5555m;
pay = Math.Round(pay + bonus, 2);
string payAsString = string.Format("{0:0.00}", pay);
Run Code Online (Sandbox Code Playgroud)