将变量四舍五入到小数点后两位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参考资料:
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