Java 将双精度四舍五入到最接近的下一个数字
我想将一个双精度值四舍五入到下一个数字 尝试使用Math.ceil和Math.round,但没有效果 以下是条件和代码:Java 将双精度四舍五入到最接近的下一个数字,java,math,double,rounding,Java,Math,Double,Rounding,我想将一个双精度值四舍五入到下一个数字 尝试使用Math.ceil和Math.round,但没有效果 以下是条件和代码: Double totalAsset = Util.convertToDouble(dataObject) * calculus; // 62072560. * 06433535204605706 = 399345.99999999994 System.out.println(totalAsset.longValue()); 但是我得到了399345,而它应该是39934
Double totalAsset = Util.convertToDouble(dataObject) * calculus;
// 62072560. * 06433535204605706 = 399345.99999999994
System.out.println(totalAsset.longValue());
但是我得到了399345,而它应该是399346。添加If语句是否有帮助
用缩短的1234减去实际结果1234,56,然后检查结果是>=0,5向上取整还是<0,5向下取整?你的意思是这样的吗? 每个println语句打印399346
public class Test {
public static void main(final String[] args) {
final long l0 = (long) Math.ceil(399345.1); //Becomes 399346
final long l1 = (long) Math.ceil(399345.5); //Becomes 399346
final long l2 = (long) Math.ceil(399345.6); //Becomes 399346
final long l3 = (long) Math.ceil(399345.7); //Becomes 399346
final long l4 = (long) Math.ceil(399345.8); //Becomes 399346
final long l5 = (long) Math.ceil(399345.9); //Becomes 399346
System.out.println(l0); //Prints 399346
System.out.println(l1); //Prints 399346
System.out.println(l2); //Prints 399346
System.out.println(l3); //Prints 399346
System.out.println(l4); //Prints 399346
System.out.println(l5); //Prints 399346
}
}
如果您不介意开销,BigDecimal会帮助您:
final BigDecimal a = new BigDecimal("1.899999");
final BigDecimal b = new BigDecimal("1.911111");
System.out.println(a.setScale(1, RoundingMode.UP)); // prints 1.9
System.out.println(b.setScale(1, RoundingMode.UP)); // prints 2.0
要打印,因此不会丢失任何精度,可以使用DecimalFormat 否则,双精度的精确舍入会附加一些字符串。我建议阅读我从中删除此方法的:
public static double round(double value, int places) {
if (places < 0) throw new IllegalArgumentException();
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(places, RoundingMode.HALF_UP);
return bd.doubleValue();
}
如果您确实想接收您的号码,我还不清楚,您可以将RoundingMode更改为RoundingMode.天花板。阅读有关RoundingMode的更多信息。请定义rest。rest表示小数点从5开始。不,这可能还不是每个人都清楚。请展示一系列数字以及你希望它们如何舍入。Math.round就是这样做的。是什么原因使它对你无效?@sTg真的吗?我刚刚测试了System.out.printlnMath.round399345.4;它打印了399345。
public static double round(double value, int places) {
if (places < 0) throw new IllegalArgumentException();
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(places, RoundingMode.HALF_UP);
return bd.doubleValue();
}