四舍五入变量到小数点后两位C#[复制](Rounding a variable to two dec

2019-07-31 23:44发布

可能重复:
你怎么把一个数字在C#小数点后两位?

我感兴趣的是如何将变量四舍五入到小数点后两位。 在下面的例子中,奖金通常是四个小数位的数字。 有没有什么办法,以确保薪酬变量始终四舍五入至小数点后两位?

      pay = 200 + bonus;
      Console.WriteLine(pay);

Answer 1:

使用Math.Round并指定小数位的数量。

Math.Round(pay,2);

Math.Round方法(双人间,Int32)将

舍入的双精度浮点值,以小数位指定次数。

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

舍入的小数值到小数位指定次数。



Answer 2:

您应该使用的形式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

( 为什么.NET使用银行家舍? )



Answer 3:

decimal pay  = 1.994444M;

Math.Round(pay , 2); 


Answer 4:

您可以四舍五入的结果,并使用string.Format设置这样的精度:

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


Answer 5:

请确保你提供一个数字,通常使用双。 Math.Round需要1-3参数,第一个参数是要圆的变量,第二个是小数位的数量,三是四舍五入的类型。

double pay = 200 + bonus;
double pay = Math.Round(pay);
// Rounds to nearest even number, rounding 0.5 will round "down" to zero because zero is even
double pay = Math.Round(pay, 2, MidpointRounding.ToEven);
// Rounds up to nearest number
double pay = Math.Round(pay, 2, MidpointRounding.AwayFromZero);


Answer 6:

要注意的是, Round

所以(我不知道,如果它在你的行业重要与否),但是:

float a = 12.345f;
Math.Round(a,2);

//result:12,35, and NOT 12.34 !

为了使你的情况下 ,我们可以做这样的事情更精确:

int aInt = (int)(a*100);
float aFloat= aInt /100.0f;
//result:12,34 


Answer 7:

使用System.Math.Round到回合十进制值的小数位数指定次数。

var pay = 200 + bonus;
pay = System.Math.Round(pay, 2);
Console.WriteLine(pay);

MSDN参考:

  • http://msdn.microsoft.com/en-us/library/system.math.round.aspx
  • http://msdn.microsoft.com/en-us/library/zy06z30k.aspx


Answer 8:

Console.WriteLine(decimal.Round(pay,2));


文章来源: Rounding a variable to two decimal places C# [duplicate]