对于没有十进制格式的double,在2个位置后截断小数

时间:2013-08-14 16:29:32

标签: java performance double rounding

我试图“截断”一个double只返回两位小数。

例:
 给定1375568.13124765会返回=> 1375568.13

使用十进制格式太慢了。我在一个循环中多次调用它。为了加快我正在尝试的过程:

public static double castRoundTo2(double d)
{
  return (long) (d * 100 + 0.5) / 100.0;
}

返回类似1375568.13000015

的内容

有两个小数位后是否有任何切断的东西?

这是用于数值计算。

2 个答案:

答案 0 :(得分:2)

你希望通过这样做达到什么目的?如果你想只是很好地显示一个十进制数,你可以采用的一种方法是:

final double number = 45.212454664;
System.out.printf("%1.2f", number);

哪个会打印2位小数的数字。在这种情况下,输出为45.21

编辑:如果你想要一个通用的方法来舍入数字,你可以这样做:

    public static double round(final double number, final int precision){
    return Math.round(number * Math.pow(10, precision)) / Math.pow(10, precision);
}

答案 1 :(得分:0)

  

在小数点后两位有没有切断任何东西?

这就是它的作用。

我会检查你的测试

public static void main(String[] args) {
    System.out.println(castRoundTo2(1375568.13000015));
    System.out.println(castRoundTo2(1375568.13124765));

    System.out.println(round2(-1375568.13000015));
    System.out.println(round2(-1375568.13124765));
}

public static double castRoundTo2(double d) {
    return (long) (d * 100 + 0.5) / 100.0;
}

public static double round2(double d) {
    return roundToFactor(d, 100);
}

public static double roundToFactor(double d, double f) {
    return Math.round(d * f) / f;
}

打印

1375568.13
1375568.13
-1375568.13
-1375568.13

注意:castRoundTo2向正无穷大舍入。 Math.round,远离零。

如果你想要一个简单的圆形方法,你可以做到