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()
在任何情况下
floatdouble
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);StringString.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;
添加回答
举报
