0

我正在尝试“截断”双精度以仅返回两位小数。

示例:
给定1375568.13124765将返回 =>1375568.13

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

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

这正在返回类似1375568.13000015

有没有要截掉小数点后两位的东西?

这是用于数值计算的。

4

2 回答 2

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);
}
于 2013-08-14T16:35:12.540 回答
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,从零开始四舍五入。

如果你想要一个简单的方法来四舍五入你可以做

于 2013-08-14T16:35:10.930 回答