我试图“截断”一个double只返回两位小数。
例:
给定1375568.13124765
会返回=> 1375568.13
使用十进制格式太慢了。我在一个循环中多次调用它。为了加快我正在尝试的过程:
public static double castRoundTo2(double d)
{
return (long) (d * 100 + 0.5) / 100.0;
}
返回类似1375568.13000015
有两个小数位后是否有任何切断的东西?
这是用于数值计算。
答案 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,远离零。
如果你想要一个简单的圆形方法,你可以做到