4 回答

TA贡献1864条经验 获得超2个赞
round(200.3456, 2); // returns 200.35
原始版本;注意这个
public static double round(double value, int places) { if (places < 0) throw new IllegalArgumentException(); long factor = (long) Math.pow(10, places); value = value * factor; long tmp = Math.round(value); return (double) tmp / factor;}
round(1000.0d, 17)
round(90080070060.1d, 9)
所以,用这个代替
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();}
HALF_UP
new BigDecimal(value).setScale(places, RoundingMode.HALF_UP).doubleValue()
在任何情况下
float
double
999199.1231231235 == 999199.1231231236 // true1.03 - 0.41 // 0.6200000000000001
System.out.println(new BigDecimal(1.03).subtract(new BigDecimal(0.41)));System.out.println(new BigDecimal("1.03").subtract(new BigDecimal("0.41")));
项目48:“避免 float
和 double
如果需要确切的答案“ 有效Java
(第二版)
round(200, 0)
200.0

TA贡献1852条经验 获得超7个赞
double
double value = 200.3456;System.out.printf("Value: %.2f", value);
String
String.format()
String result = String.format("%.2f", value);
DecimalFormat
:
DecimalFormat df = new DecimalFormat("####0.00");System.out.println("Value: " + df.format(value));

TA贡献1818条经验 获得超7个赞
double val = ....;val = val*100;val = Math.round(val);val = val /100;
double val = ....;val = val*100;val = (double)((int) val);val = val /100;
添加回答
举报