C# - 取决于值,十进制为整数和舍入

时间:2013-05-24 15:33:20

标签: c# integer double

我正在尝试将decimal转换为integer,并希望根据具体情况向上或向下舍入值。

基本上的例子是:

  • 12/3 = 4所以应该四舍五入到
  • 11/3 = 3.66666所以应该四舍五入到
  • 10/3 = 3 = 3.33333所以应该舍入到3
  • 9/3 = 3所以应该舍入到3

无论我在互联网上发现什么总是向下舍入或总是向上舍入,从不根据数字做出判断。

4 个答案:

答案 0 :(得分:4)

如果x是您想要舍入的数字并且您想要“正常”的舍入行为(以便.5总是向上舍入),则需要使用Math.Round(x, MidpointRounding.AwayFromZero)。请注意,如果您实际上计算分数并且分子和分母是整数,则需要先将其中一个转换为双精度(否则,除法运算符将生成一个向下舍入的整数),如果您希望结果为成为int,您需要投射Round()的结果:

int a = 5;
int b = 2;
double answer = (int) Math.Round(a / (double) b, MidpointRounding.AwayFromZero);

答案 1 :(得分:1)

Math.Round(d)能做你需要的吗?

返回值: 整数最近参数d。如果d的小数分量在两个整数之间,其中一个是偶数而另一个是奇数,则返回偶数。请注意,此方法返回Decimal而不是整数类型。

查看Round reference page

答案 2 :(得分:1)

Math.Round(value)应该做你想做的事。示例控制台应用程序代码演示:

Console.Write("12 / 3 = ");
Console.WriteLine((int)Math.Round(12d / 3d));
Console.WriteLine();

Console.Write("11 / 3 = ");
Console.WriteLine((int)Math.Round(11d / 3d));
Console.WriteLine();

Console.Write("10 / 3 = ");
Console.WriteLine((int)Math.Round(10d / 3d));
Console.WriteLine();

Console.Write("9 / 3 = ");
Console.WriteLine((int)Math.Round(9d / 3d));
Console.WriteLine();

Console.ReadKey();

答案 3 :(得分:0)

你可以试试这个

Math.Round(d, 0, MidpointRounding.AwayFromZero)

有时,人们在转换为int之前将数字加0.5。