我正在尝试“截断”双精度以仅返回两位小数。
示例:
给定1375568.13124765将返回 =>1375568.13
使用十进制格式太慢了。我在一个循环中多次调用它。为了加快我正在尝试的过程:
public static double castRoundTo2(double d)
{
return (long) (d * 100 + 0.5) / 100.0;
}
这正在返回类似1375568.13000015
有没有要截掉小数点后两位的东西?
这是用于数值计算的。
我正在尝试“截断”双精度以仅返回两位小数。
示例:
给定1375568.13124765将返回 =>1375568.13
使用十进制格式太慢了。我在一个循环中多次调用它。为了加快我正在尝试的过程:
public static double castRoundTo2(double d)
{
return (long) (d * 100 + 0.5) / 100.0;
}
这正在返回类似1375568.13000015
有没有要截掉小数点后两位的东西?
这是用于数值计算的。
你希望通过这样做达到什么目的?如果您只想很好地显示一个十进制数,您可以这样做的一种方法是:
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);
}
有没有要截掉小数点后两位的东西?
这就是它的作用。
我会检查你的测试
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,从零开始四舍五入。
如果你想要一个简单的方法来四舍五入你可以做