如何在没有 Math#round 的情况下进行舍入?

How to round without Math#round?

因此,只需执行以下操作即可轻松进入十分之一的位置:

int y;
double x = 2.5;

y = (int) (x+.5);

但是如果不使用 Math.round(),您将如何四舍五入到百分之一甚至千位?

您可以将原始数字乘以 10 的次方,以便所需舍入的位置位于单位位置,应用您已有的 "add half and round" 方法,然后除以相同的 10 次方,因此结果数字现在恢复到原来的比例。

百分之一:

  1. 声明 ydouble。这样一来,将 2.125 四舍五入到百分之一的位置将导致 2.13,而不是 2
  2. x 值乘以 100.0
  3. 添加0.5.
  4. 转换为 int。 (或 long 更精确。)
  5. 除以 100.0

示例:将 2.125 四舍五入到百分之一的位置。 1. 2.125 * 100.0 是 212.5。 2. 212.5 + 0.5 是 213.0。 3. 213.0 转换为 int213。 4. 213 除以 100.0 得到 2.13.

对于千分之一,程序是相同的,只是将100.0替换为1000.0

由于double浮点类型的精度有限,上述方法容易出现浮点错误。

您还可以将您的值转换为 BigDecimal。然后你可以使用 BigDecimal's round method. It takes a MathContext ,它允许你直接舍入到所需的精度。

public class 十进制 {

public static void main(String[] args) {

    double xd = 2.125;
    double mult = xd * 100.0;
    double add = mult + 0.5;
    int reuslts = (int) add;

    double result = reuslts / 100.0;

    System.out.println(result);// 2.13
}

}