我对如何将变量四舍五入到小数点后两位很感兴趣。在下面的示例中,奖金通常是一个小数点后四位的数字。有什么办法可以确保薪酬变量总是四舍五入到小数点后两位?
pay = 200 + bonus;
Console.WriteLine(pay);
您应该使用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
decimal pay = 1.994444M;
Math.Round(pay , 2);
您可以将结果四舍五入并用于string.Format
设置精度,如下所示:
decimal pay = 200.5555m;
pay = Math.Round(pay + bonus, 2);
string payAsString = string.Format("{0:0.00}", pay);
使用 System.Math.Round 将十进制值四舍五入为指定的小数位数。
var pay = 200 + bonus;
pay = System.Math.Round(pay, 2);
Console.WriteLine(pay);
MSDN 参考资料:
确保提供一个数字,通常使用双精度数。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);
注意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
Console.WriteLine(decimal.Round(pay,2));