可能重复:
你怎么把一个数字在C#小数点后两位?
我感兴趣的是如何将变量四舍五入到小数点后两位。 在下面的例子中,奖金通常是四个小数位的数字。 有没有什么办法,以确保薪酬变量始终四舍五入至小数点后两位?
pay = 200 + bonus;
Console.WriteLine(pay);
可能重复:
你怎么把一个数字在C#小数点后两位?
我感兴趣的是如何将变量四舍五入到小数点后两位。 在下面的例子中,奖金通常是四个小数位的数字。 有没有什么办法,以确保薪酬变量始终四舍五入至小数点后两位?
pay = 200 + bonus;
Console.WriteLine(pay);
使用Math.Round并指定小数位的数量。
Math.Round(pay,2);
Math.Round方法(双人间,Int32)将
舍入的双精度浮点值,以小数位指定次数。
或Math.Round方法(十进制,Int32)将
舍入的小数值到小数位指定次数。
您应该使用的形式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使用银行家舍? )
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);
请确保你提供一个数字,通常使用双。 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
使用System.Math.Round到回合十进制值的小数位数指定次数。
var pay = 200 + bonus;
pay = System.Math.Round(pay, 2);
Console.WriteLine(pay);
MSDN参考:
Console.WriteLine(decimal.Round(pay,2));