double d = 221.62999999999997 ;
NumberFormat format = NumberFormat.getInstance();
System.out.println(format.format(d));
輸出結果:221.63
上述格式化方法帶格式化符号1,234.87.00
double d = 221.62999999999997 ;
BigDecimal bigDecimal = new BigDecimal(d);
System.out.println(bigDecimal.setScale(3, BigDecimal.ROUND_HALF_UP));
輸出結果:221.630
=====================
example:
public class DecimalUtil {
private static final Log log = LogFactory.getLog(DecimalUtil.class);
private static final String SIXTH_DECIMAL_FORMAT = "###.######";
public static final DecimalFormat SIXTH_DECIMAL_FORMATTER = new DecimalFormat(
SIXTH_DECIMAL_FORMAT);
public static String toStringDecimal(Double number) {
if (number == null)
return null;
else
return SIXTH_DECIMAL_FORMATTER.format(number);
}
public static Double round(Double num, int scale) {
if (num == null)
return null;
BigDecimal val = new BigDecimal(num);
val = val.setScale(scale, BigDecimal.ROUND_DOWN);
return val.doubleValue();
}
public static Double toSixthDecimal(Double num) {
if (num == null)
return null;
else
return round(num, 6);
}
public static Double toSecondDecimal(Double num) {
if (num == null)
return null;
else
return round(num, 2);
}
}
==============
注意,如果精度為6位時,使用ROUND_HALF_UP是不穩定的
BigDecimal val = new BigDecimal(98.4857555);
val = val.setScale(6, BigDecimal.ROUND_HALF_UP);
結果是98.485755,并未進位。
可以使用以下代替:
DecimalFormat SIXTH_DECIMAL_FORMATTER = new DecimalFormat("###.######");
SIXTH_DECIMAL_FORMATTER.format(98.4857555);