将int转换为double并舍入为最后一个整数

时间:2012-07-26 12:26:54

标签: c# algorithm

我在这里遇到一个小问题,说你有以下代码:

int whole = 0;
double decimal = 88.00

whole = decimal / 1.5; //now the answer is 58.66

所以这就是问题,明确地将一个double转换为int很容易。但是如果我这样做,那么现在'整体'将被设置为59.这个 - 不太好,我希望它被设置为最后一个整数(58)。

你如何在C#中做到这一点?

6 个答案:

答案 0 :(得分:7)

要将双精度舍入为整数,您有4个基本数学函数:

  1. Math.Round() - 舍入到最接近的整数(或用户指定的分位数),并允许您选择向上或向下舍入中间点。

  2. Math.Floor() - 向负无穷大的第一个整数舍入。

  3. Math.Ceiling() - 向正无穷大舍入第一个整​​数。

  4. Math.Truncate() - 向第一个整数舍入为零。

  5. 我认为你想要FloorTruncate。两者都向下舍入为正数,但Truncate向下舍入-3.6到-3,而Floor向右舍入为-4。

    转换为int与截断相同,因此如果您愿意,可以使用它。

答案 1 :(得分:4)

Math.Floor

whole = (int)Math.Floor(decimal / 1.5);

答案 2 :(得分:2)

如果您将double投射到int,答案将不会是59 - 它将是58.将double投射到int时,该值将被舍入朝零。所以,这就足够了:

int whole = 0;
double x = 88.00;
whole = (int)(x / 1.5); // whole will be 58

答案 3 :(得分:1)

如果要舍入到最后一个整数,请使用Math.Floor;如果要舍入到下一个整数,请使用Math.Ceiling

答案 4 :(得分:0)

这会将double值转换为int

whole = (int)(decimal / 1.5);

此外,您可以使用Math.Floor(doubleValue)

答案 5 :(得分:0)

如果你需要四舍五入,那么使用它是很常见的: whole =(int)(decimal / 1.5 + 0.5); 没有0.5,你就是截断,而不是四舍五入。

如果你的数学库中有一个舍入函数,那也很好。其中一些将为舍入0.5做奇/偶事,以避免一点数据偏斜。