问题描述
- 关于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)为什么?????????????????
解决方案
已解决 是JDK8的一个漏洞 官方以更新 从新下载JDK解决问题
解决方案二:
四舍六入五成双(百度百科)
关于四舍六入五成双
四舍六入五成双
解决方案三:
自己实现一个算法封装下。
时间: 2024-10-27 06:35:25