首页 > 代码库 > JAVA通过BigDecimal四舍五入解决方案和注意事项

JAVA通过BigDecimal四舍五入解决方案和注意事项

 /**
     * @Description: 四舍五入留2位小数
     * @param valueName
     * @return
     */
    public static Double formateDouble45(Double d){
        if(d == null){
            return 0d;
        }
        BigDecimal   b   =   new   BigDecimal(d);
        double   f   =   b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();
        return f;
    }上面是以前我写的一个四舍五入保留2位小数的方法,最近发现是有问题的例如:2.555 得到是2.55 而不是预想的2.56改进如下:<pre name="code" class="java">    /**
	 * @Description: 四舍五入留2位小数
	 * @param valueName
	 * @return
	 */
	public static Double formateDouble45(Object d){
		if(d == null){
			return 0d;
		}
		BigDecimal   b   =   new   BigDecimal(d.toString());
		double   f   =   b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();
		return f;
	}

通过测试发现如果构建BugDecimal的时候使用String类型的话,则可实现全部正常的四舍五入.
具体原因不详.

JAVA通过BigDecimal四舍五入解决方案和注意事项