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

问题描述

关于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

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

linux jdk版本随时切换版本 随时切换实现方法

项目处理问题遇到如下情况,引用第三方的jar包报出ClassDefNotFoundException错误导致app崩溃,双方沟通确认该类存在且排除工程未clean,代码混淆导致等原因. 注意到编译app的时候提示了很多如下与正常情况下不一样的信息: trouble processing: bad class file magic (cafebabe) or version (0033.0000) ...while parsing com/baidu/mapapi/SDKInitializer.c

如何将.java文件编译成.class文件? 我菜鸟

问题描述 如何将.java文件编译成.class文件?我要编译1个*.JAVA文件为*.class文件网上找了似乎看在DOS做比较简单,但是我还是没看懂,好像是要用javac我电脑里装的是jdk1.6.0_11要怎么弄哥哥们帮详细说下怎么弄好么,我刚开始接触JAVA一窍不通呢.谢谢啦! 解决方案 解决方案二:下载netbeans用ide吧解决方案三:javac解决方案四:我觉得楼主是在学java直接从ide开始学起吧.解决方案五:cmd下,cd到.java所在的目录然后javac*.java解决

近五成开发者面临着较大的成本和盈利压力

移动开发者的热情正在被进一步点燃,还是已经被现实淋了一身冰雨?来自艾媒的数据预测,2012年Android开发者数量将达到116.31 万,2011年这个数字是78.42万,呈现出明显的增长态势.而DCCI与百度开发者中心的一项联合调查显示,高昂成本是开发者目前最大困扰因素之一,近五成开发者面临着较大的成本和盈利压力. 随着百度.腾讯等互联网巨头纷纷推出移动平台,开发者所面临的成本压力多长时间能得到改善?DoNews对此展开了调查. 沉重的成本 据腾讯相关人士透露,从本季度开始,接入腾讯开放平台

JAVA学习(二):JDK介绍及其结构、用途

JDK介绍及其结构.用途 1.JDK的介绍 JDK是Java Development Kit 的缩写,是Sun Microsystems针对Java开发员的产品.它由一个处于操作系统层之上的运行环境还有开发者编译,调试和运行用Java语言写的applet和应用程序所需的工具组成.想要开发java产品,需先安装JDK. (1).JDK包含的基本组件包括: javac – 编译器,将源程序转成字节码: jar – 打包工具,将相关的类文件打包成一个文件: javadoc – 文档生成器,从源码注释中

如何把Java项目打包成exe文件

问题描述 我在使用exe4j把Java项目打包成exe的时候,最后出现错误了,不能把oracle的驱动jar包加进去,不知道怎么弄了.在Java项目中,我已经把oracle的jar包放在项目中的lib下,并在项目中引用了,但是在转换的时候,驱动jar包总是不能添加到exe文件中,JRE环境的文件都能添加到里面 解决方案 解决方案二:你百度,,,我见过那种方法!解决方案三:不要exe了,用java或javaw调用jar里的入口类,将命令行写成批处理,win下用bat,linux下用.hexe文件无

Java Web Start学习,与JDK中keytool常用命令

Java Web Start(以下简称JWS)是SUN提供的一种通过Web来部署和发布Java 程序的新技术,它既可以用来发布Application,也可以用来发布Applet,它获去年全球Java技术最佳创意奖.它仅在第一次运行时下载程序,以后的事情,就全全交给JWS,包括版本的自动更新和维护.这是我们曾经梦寐以求的事情,程序运行在客户端(本地运行,当然有足够的速度),但不用去安装配置客户端,也不用去考虑版本升级后对客户端的维护,这就是JWS提供给我们的好处之一.OK,下面我们就来看看如何玩转

string-请问各位大侠,java字符串转化成整数为什么会出现如下的错误?谢谢

问题描述 请问各位大侠,java字符串转化成整数为什么会出现如下的错误?谢谢 type Exception report message An exception occurred processing JSP page /admin/categoryadd.jsp at line 15 description The server encountered an internal error that prevented it from fulfilling this request. exce

java对象转成JSON串对象丢失

问题描述 java对象转成JSON串对象丢失 将一个java对象转成JSON字符串时,对象的一个属性丢失,求大神指导!!!! 解决方案 java 对象转 json串java嵌套对象转成jsonjava 将json字串转成复杂对象 解决方案二: 也许你定义的对象就是少了一个属性 解决方案三: 理论上是不会丢失的,是不是属性字段单词写错了? 解决方案四: 用jsonobject试试,将java对象转换为json字符串先将java对象转换为json对象,在将json对象转换为json字符串JSONOb

Java Core系列之ConcurrentHashMap实现(JDK 1.7)

ConcurrentHashMap类似Hashtable,是HashMap更高效的线程安全版本的实现.不同于Hashtable简单的将所有方法标记为synchronized,它将内部数组分成多个Segment,每个Segment类似一个Hashtable,从而减少锁的粒度,并且它内部有一些比较tricky实现,让get操作很多时候甚至不需要锁(本文代码基于JDK 1.7,它在JDK 1.6的基础上做了进一步的优化,想要看JDK 1.6的实现,可以参考http://www.iteye.com/to