yybing110
yybing110
2016-05-04 11:24
采纳率: 50%
浏览 2.5k
已采纳

关于JAVA四舍六入五成双不同JDK版本结果不一致的问题

import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;

public class Utils {

public static String getStrFromDb(Double db,Integer len){
    String st="#0.";
    if(len==null || len==0) {
        len = 0;
        st="#0";
    }

    for(int i=0;i<len;i++){
        st+="0";
    }
       NumberFormat numberFormat = new DecimalFormat(st);
    numberFormat.setRoundingMode(RoundingMode.HALF_EVEN);
    return   numberFormat.format(db);
}


public static String getJspValue(double db,Integer len ){
         if(db==0){
             return    getStrFromDb(0.0,len);
         }
        db=Double.parseDouble(getJspValueNoXy(db,len+1));
         String retdb=getStrFromDb(db,len) ;
         if(Double.parseDouble(retdb)==0){
             return   getJspValueNoXy(db,len+1);
         }
          return  retdb;
}


public static String getJspValueNoXy(double db,Integer len ){
    if(db==0){
        return    getStrFromDb(0.0,len);
    }


    DecimalFormat formater = new DecimalFormat();

    formater.setMaximumFractionDigits(len);
   formater.setGroupingSize(0);
    formater.setRoundingMode(RoundingMode.FLOOR);

    String retV= formater.format(db) ;
    if(Double.parseDouble(retV)==0){
        return    getJspValueNoXy(db,len+1);
    }
    return    getStrFromDb(Double.parseDouble(retV),len);

}

public static void main(String arg[]){
System.out.println("1-1-4---");
System.out.println(Utils.getJspValue(0.025,2));
System.out.println(Utils.getJspValue(0.015,2));
System.out.println(Utils.getJspValue(0.005,2));

}
}

运行结果 0.02 0.02 0.005 符合要求 JDK版本
java version "1.7.0_17"
Java(TM) SE Runtime Environment (build 1.7.0_17-b02)
Java HotSpot(TM) Client VM (build 23.7-b01, mixed mode, sharing)

服务器运行结果 0.03 0.01 0.01 结果不正确 JDK版本
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

为什么?????????????????

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • yybing110
    yybing110 2016-05-06 08:26
    已采纳

    已解决 是JDK8的一个漏洞 官方以更新 从新下载JDK解决问题

    点赞 评论
  • devmiao
    devmiao 2016-05-04 16:22

    自己实现一个算法封装下。

    点赞 评论
  • u011009741
    owqtf123 2016-05-16 08:48

    图片说明图片说明图片说明图片说明图片说明图片说明图片说明图片说明图片说明图片说明

    点赞 评论

相关推荐