首页 > 编程语言 >JAVA的HALF_DOWN和HALF_UP的区别?

JAVA的HALF_DOWN和HALF_UP的区别?

时间:2022-11-02 20:49:13浏览次数:68  
标签:JAVA BigDecimal UP DOWN bd3 HALF RoundingMode

Java代码:

public class BigDecimalDemo {
        public static void main(String[] args) {
                BigDecimal bd2=BigDecimal.valueOf(11);
                BigDecimal bd3=new BigDecimal("2.3");
                BigDecimal bdDiv = bd2.divide(bd3,38,RoundingMode.HALF_UP);
                System.out.println(bdDiv);
                BigDecimal bdDivDOWN = bd2.divide(bd3,10, RoundingMode.HALF_DOWN);
                System.out.println(bdDivDOWN);
                BigDecimal bdDivUP = bd2.divide(bd3,10, RoundingMode.HALF_UP);
                System.out.println(bdDivUP);
        }
}

  输出:

4.78260869565217391304347826086956521739
4.7826086957
4.7826086957

  题:
RoundingMode.HALF_DOWN和RoundingMode.HALF_UP的输出为何相同?

最佳答案

  好吧,RoundingMode.HALF_DOWN的javadoc说:

1、如果舍弃的分数> 0.5,则表现为RoundingMode.UP;否则,其行为与RoundingMode.DOWN相同。
RoundingMode.HALF_UP的Javadoc说:


2、如果舍弃分数≥0.5,则表现为RoundingMode.UP;否则,表现为RoundingMode.DOWN

在您的示例中,第二级和第三级中的废弃分数是0.5217391304347826086956521739,该分数> 0.5,因此两者的行为均RoundingMode.UP

仅当丢弃分数精确为0.5时,您才会看到不同的结果。

例如,以下内容:

BigDecimal bd2=BigDecimal.valueOf(11.12345678955);
BigDecimal bd3=new BigDecimal("1");
BigDecimal bdDiv = bd2.divide(bd3,38,RoundingMode.HALF_UP);
System.out.println(bdDiv);
BigDecimal bdDivDOWN = bd2.divide(bd3,10, RoundingMode.HALF_DOWN);
System.out.println(bdDivDOWN);
BigDecimal bdDivUP = bd2.divide(bd3,10, RoundingMode.HALF_UP);
System.out.println(bdDivUP);

将输出:

11.12345678955000000000000000000000000000
11.1234567895
11.1234567896

  

转自:java - Java中的HALF_DOWN和HALF_UP有什么区别? | RoundingMode (lmlphp.com)

 

标签:JAVA,BigDecimal,UP,DOWN,bd3,HALF,RoundingMode
From: https://www.cnblogs.com/wwssgg/p/16852342.html

相关文章

  • JavaWeb三大组件之Servlet学习
    JavaWeb三大组件之Servlet学习平时直接用springmvc较多,都没怎么接触底层的Servlet,导致对一些基本的知识点了解都不够,所以今天专门的抽出时间来学习一下带着问题出发,看下可以......
  • JavaWeb三大组件之Filter学习详解
    JavaWeb三大组件之Filter学习详解Filter基本上可以说存在所有的JavaWeb项目中,比如最基本的一个请求参数的编码​​CharacterEncodingFilter​​,大家一般都会配置下,那么filte......
  • Java可以如何实现文件变动的监听
    Java可以如何实现文件变动的监听应用中使用logback作为日志输出组件的话,大部分会去配置​​logback.xml​​这个文件,而且生产环境下,直接去修改logback.xml文件中的日志级......
  • java 接口的应用
    总结,接口可以在一个类继承别的父类后,如果父类不满足当前的需求,可以通过接口的形式添加方法,进行功能的扩充publicclassInter_Demo{publicstaticvoidmain(String......
  • 性能测试(7)----Java监控
    1.8堆和原空间1.7堆(普通数据放到堆)栈(基础数据放到栈) JDKbin目录下有两个java监控工具:jvisualvm(安装一个插件visualgc可以看到堆栈使用情况)和 jconsole.exe(监控......
  • Java-抽象模板模式
    什么是模板模式?定义程序的骨架,而将一些步骤延迟到子类中。模板模式使得子类可以不需要改变程序的结构即可重定义该程序的某些特定步骤。通俗的讲,模......
  • JAVA中的堆栈数据存储
    结论引用类型,总是储存在堆上(数组同样属于引用类型,只不过他是使用c实现的);基础类型,在方法中的局部变量储存在栈,对象实例中的实例字段则随对象一同存储在堆上;线程享有自......
  • JavaWeb期中考试-2021年版(一)
    终于轮到了我自己的期中考试,总体来说本次的期中考试并不难,和19年的期中考试可以说是一模一样,以下要提醒的是,程序在我的电脑上是没什么问题,但是有些配置原因可能在别的设备......
  • JavaWeb之Servlet1
    Servlet方法初始化方法,在Servlet被创建时执行,只执行一次voidinit(ServletConfigconfig)提供服务方法,每次Servlet被访问,都会调用该方法voidservice(ServletRequestr......
  • java关于加密key保存乱码问题
    当我们无论使用对称加密还是非对称加密都会涉及到key,随机生成的key一般是byte[]类型,通过String进行保存的时候就会出现无法识别问题,并且读取后无法识别问题。这个时候通过......