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

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

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

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


这将返回类似1375568.13000015的内容

小数点后两位有什么舍不得的吗?

这是用于数值计算。

最佳答案

小数点后两位有什么舍不得的吗?


那就是它的作用。

我会检查你的考试

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,从零开始舍入。

如果您想要一种简单的方法可以做

10-08 19:13