将变量四舍五入到小数点后两位C#

将变量四舍五入到小数点后两位C#,c#,variables,decimal,rounding,C#,Variables,Decimal,Rounding,我对如何将变量四舍五入到小数点后两位很感兴趣。在下面的例子中,奖金通常是一个小数点后四位的数字。有没有办法确保薪酬变量始终四舍五入到小数点后两位 pay = 200 + bonus; Console.WriteLine(pay); 使用并指定小数位数 Math.Round(pay,2); 将双精度浮点值舍入到指定的数字 小数位数 var pay = 200 + bonus; pay = System.Math.Round(pay, 2); Console.WriteLine(pay

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

  pay = 200 + bonus;
  Console.WriteLine(pay);
使用并指定小数位数

Math.Round(pay,2);

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

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

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

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

您可以对结果进行四舍五入,并使用
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参考资料:


确保提供一个数字,通常使用双精度。四舍五入可以接受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);
你应该使用一种形式的。请注意,除非指定值,否则
Math.Round
默认为银行舍入(舍入到最接近的偶数)。如果您不想使用银行家取整法,您应该使用,如下所示:

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

()

注意
这一事实

所以(我不知道这对你所在的行业是否重要),但是:

为了使您的案例更准确,我们可以这样做:

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

谷歌搜索?作业标签已过时哇作业标签??现在刚刚看到它,请确保您使用的是
float
double
decimal
类型,否则这将永远不会起作用。我使用的是double,但它对我仍然不起作用重要提示:这将在0.005到0.00之间取整!看看下面Jon的答案中为什么会出现这种情况,这应该是最重要的答案。我怀疑你能否在第一行中用两种不同的方式使用
pay
!当您已经使用了
Math.Round
时,也许也不需要使用字符串格式?如果您不想对实际的数字结构进行四舍五入,而只想缩短生成的字符串,那么字符串格式化是一件好事。在这种情况下,还可以考虑“<代码>”f“<代码> >代码> >(和<代码>”n“< /代码>,<代码>”N2“< /COD>”格式字符串,例如“代码>字符串”格式(“{ 0:N}”,支付)<或代码>或等同于代码>支付。ToString(“n”)< /代码> @ JeppeStigNielsen,第一行完全正确!修正。有趣的是,我以前从未使用过
{0:N}
,我想这是习惯的产物;o) 为了进一步解释,
“F”
四舍五入到由当前线程的当前区域性的
NumberFormat
指定的小数位数。这通常是两位小数<代码>“F2”始终四舍五入到两位小数<代码>“N”和
“N2”
类似,但它们也根据培养基插入组分隔符。例如
(11223344.5566m)。在某些区域性中,ToString(“N”)
可能会生成格式化的数字
“11223344.56”
。请参阅.Math.Round不接受浮点数作为参数。
int aInt = (int)(a*100);
float aFloat= aInt /100.0f;
//result:12,34