46

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

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

8 回答 8

94

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

Math.Round(pay,2);

Math.Round 方法 (Double, Int32)

将双精度浮点值四舍五入为指定的小数位数。

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

将十进制值四舍五入为指定的小数位数。

于 2012-09-27T12:41:58.800 回答
29

您应该使用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 使用银行家的四舍五入?

于 2012-09-27T12:46:51.353 回答
6
decimal pay  = 1.994444M;

Math.Round(pay , 2); 
于 2012-09-27T12:43:01.623 回答
4

您可以将结果四舍五入并用于string.Format设置精度,如下所示:

decimal pay = 200.5555m;
pay = Math.Round(pay + bonus, 2);
string payAsString = string.Format("{0:0.00}", pay);
于 2012-09-27T12:44:18.703 回答
2

使用 System.Math.Round 将十进制值四舍五入为指定的小数位数。

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

MSDN 参考资料:

于 2012-09-27T12:45:16.313 回答
2

确保提供一个数字,通常使用双精度数。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);
于 2012-09-27T12:45:58.393 回答
2

注意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 
于 2012-09-27T12:48:35.977 回答
1
Console.WriteLine(decimal.Round(pay,2));
于 2012-09-27T12:44:12.893 回答