在jsp页面运行一个sql语句,其中有一个字段是ROUND(CAST(A AS DOUBLE)/B,2),使用rs.getDouble(10)取出显示在页面后,很多值显示不正常(如:4.329999998等),有的就能正常显示四舍五入的结果(如:4.33)。更奇怪的是,如果复制结果拷贝到excel表中后,4.329999998就会显示为4.33,这是什么问题?该怎样解决?

解决方案 »

  1.   

    小数位截取了那个你要自己控制一下小数位要显示多少位,还有double底层是用了2进制,所以有可能计算出来的结果不准,试一下用BigDecimal
      

  2.   

    可以用标签固定以下格式.1.导入标签库<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>2.利用bean:write格式化输出  如:<bean:write name="变量名" priperty="值" format="#.#########">                   注:小数点后几个#就代表保留几位数,没有则添零占位.
      

  3.   

    用下面的方法试下
    public double round(double doubValue,int scale){
            if(scale<0) {
                throw new IllegalArgumentException("The scale must be a positive integer or zero");
            }
            BigDecimal b = new BigDecimal(Double.toString(doubValue));
            BigDecimal one = new BigDecimal("1");
            return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
        }
    我都是用这个方法的解决小数问题的.
      

  4.   

    问题原因:float 和double不能用于计算,而且经常精度会有损失
    解决方法:使用java.math.BigDecimal