java 四舍五入运算_JAVA正确的四舍五入方法「建议收藏」

java 四舍五入运算_JAVA正确的四舍五入方法「建议收藏」在JDK版本为1.8的情况运行下面的代码,会发现很神奇的情况(见运行结果)。看如下代码:packagecom.longge.mytest;importjava.math.BigDecimal;importjava.math.RoundingMode;importjava.text.DecimalFormat;importorg.junit.Test;publicclassTestDecimal…

大家好,又见面了,我是你们的朋友全栈君。

在JDK版本为1.8的情况运行下面的代码,会发现很神奇的情况(见运行结果)。

看如下代码:

packagecom.longge.mytest;importjava.math.BigDecimal;importjava.math.RoundingMode;importjava.text.DecimalFormat;importorg.junit.Test;public classTestDecimal {

@Testpublic voidtest() {

BigDecimal a= new BigDecimal(0.075);

BigDecimal a1= new BigDecimal(10.075);

BigDecimal a2= new BigDecimal(100.075);

BigDecimal b= new BigDecimal(0.074);

BigDecimal b1= new BigDecimal(10.074);

BigDecimal b2= new BigDecimal(100.074);

BigDecimal c= new BigDecimal(“0.075”);

BigDecimal c1= new BigDecimal(“10.075”);

BigDecimal c2= new BigDecimal(“100.075”);

DecimalFormat df= new DecimalFormat(“#0.00”);

BigDecimal one=BigDecimal.ONE;//0.07

System.out.println(a.divide(one, 2, RoundingMode.HALF_UP).doubleValue());//0.08

System.out.println(a.divide(one).add(new BigDecimal(“0.0000000001”)).setScale(2, RoundingMode.HALF_UP).doubleValue());//0.07

System.out.println(b.divide(one, 2, RoundingMode.HALF_UP).doubleValue());//0.07

System.out.println(b.divide(one).add(new BigDecimal(“0.0000000001”)).setScale(2, RoundingMode.HALF_UP).doubleValue());//0.07

System.out.println(df.format(0.074));//0.07

System.out.println(df.format(0.075));//0.08

System.out.println(c.divide(one, 2, RoundingMode.HALF_UP).doubleValue());

System.out.println(“—————————-“);//10.07

System.out.println(a1.divide(one, 2, RoundingMode.HALF_UP).doubleValue());//10.08

System.out.println(a1.divide(one).add(new BigDecimal(“0.0000000001”)).setScale(2, RoundingMode.HALF_UP).doubleValue());//10.7

System.out.println(b1.divide(one, 2, RoundingMode.HALF_UP).doubleValue());//10.07

System.out.println(b1.divide(one).add(new BigDecimal(“0.0000000001”)).setScale(2, RoundingMode.HALF_UP).doubleValue());//10.07

System.out.println(df.format(10.074));//10.07

System.out.println(df.format(10.075));//10.08

System.out.println(c1.divide(one, 2, RoundingMode.HALF_UP).doubleValue());

System.out.println(“—————————-“);//100.08

System.out.println(a2.divide(one, 2, RoundingMode.HALF_UP).doubleValue());//100.08

System.out.println(a2.divide(one).add(new BigDecimal(“0.0000000001”)).setScale(2, RoundingMode.HALF_UP).doubleValue());//100.07

System.out.println(b2.divide(one, 2, RoundingMode.HALF_UP).doubleValue());//100.07

System.out.println(b2.divide(one).add(new BigDecimal(“0.0000000001”)).setScale(2, RoundingMode.HALF_UP).doubleValue());//100.07

System.out.println(df.format(100.074));//100.08

System.out.println(df.format(100.075));//100.08

System.out.println(c2.divide(one, 2, RoundingMode.HALF_UP).doubleValue());

}

}

运行结果如下:

0.07

0.08

0.07

0.07

0.07

0.07

0.08

—————————-

10.07

10.08

10.07

10.07

10.07

10.07

10.08

—————————-

100.08

100.08

100.07

100.07

100.07

100.08

100.08

其中可选模式有:

1、 ROUND_UP:远离零方向舍入。向绝对值最大的方向舍入,只要舍弃位非0即进位。

2、 ROUND_DOWN:趋向零方向舍入。向绝对值最小的方向输入,所有的位都要舍弃,不存在进位情况。

3、 ROUND_CEILING:向正无穷方向舍入。向正最大方向靠拢。若是正数,舍入行为类似于ROUND_UP,若为负数,舍入行为类似于ROUND_DOWN。Math.round()方法就是使用的此模式。

4、 ROUND_FLOOR:向负无穷方向舍入。向负无穷方向靠拢。若是正数,舍入行为类似于ROUND_DOWN;若为负数,舍入行为类似于ROUND_UP。

5、 HALF_UP:最近数字舍入(5进)。这是我们最经典的四舍五入。

6、 HALF_DOWN:最近数字舍入(5舍)。在这里5是要舍弃的。

7、 HAIL_EVEN:银行家舍入法。

查看JDK的官方说明:

ca8d2f7ce60b38a301600aae123b8818.png

所以在做对精度要求高的计算时,要将double/float转成字符串后再转成BigDecimal进行计算

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143481.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月11日 下午12:20
下一篇 2022年5月11日 下午12:40


相关推荐

  • 解决哈希冲突的方法「建议收藏」

    解决哈希冲突的方法「建议收藏」在实际的应用中,选取合适的哈希函数可减少冲突,但冲突是不可避免的。所以我就想给大家说几种解决哈希冲突的方法啦~首先就是开放定址法,用这个方法处理冲突的核心思想就是在冲突发生的时候,形成一个地址序列,顺着这个序列挨个去检查探测,一直等到找到一个“空”的开放地址。把我们发生冲突的关键字值存放到这个“空”地址中去。这个地址的算法一般就是:Hi=(H(key)+di)%m  这里面的i=1,2,。

    2022年6月17日
    44
  • LD_DEBUG使用「建议收藏」

    LD_DEBUG使用「建议收藏」LD_DEBUG1.LD_DEBUG可以用来查看程序搜索库的路径,使用方法如下:LD_DEBUG=libs./your_programLD_DEBUG=help查看命令使用方法2.执行find/usr-namelibevent-1.4.so.2得知libevnet=1.4.so.2已经安装,但是不在默认共享库的查找路径下.库路径在该目录下:/usr/local/lib/

    2022年10月10日
    4
  • 笔记本电脑运行卡顿的真正原因和解决方案视频_笔记本怎么开高性能模式

    笔记本电脑运行卡顿的真正原因和解决方案视频_笔记本怎么开高性能模式只要是联网大型程序运行中出现了卡顿现象,我们总是习惯性的认为这是服务器卡或网络不流畅的问题,然而事实并非如此。尤其是如果你在用笔记本电脑,那么就请先好好找找自己笔记本电脑的问题吧。这个话题特别有意义,因为现在笔记本电脑在大城市普及到几乎小青年人手一台的程度,随着生活节奏不断加快,留给各位在家安安心心用台式机的机会是越来越少了,如何把笔记本电脑调教到运行流畅的效果,让各位工作高效顺利,让各位玩游戏玩

    2025年10月30日
    4
  • WSL安装的OpenClaw 创建虚拟环境和pip安装

    WSL安装的OpenClaw 创建虚拟环境和pip安装

    2026年3月15日
    2
  • maven jar 中没有主清单属性「建议收藏」

    maven jar 中没有主清单属性「建议收藏」mavenjar中没有主清单属性

    2025年9月12日
    9
  • python中向下取整(round向下取整)

    fromnumpy\core_multiarray_umath.pynp.floor()deffloor(x,*args,**kwargs):#realsignatureunknown;NOTE:unreliablyrestoredfrom__doc__”””floor(x,/,out=None,*,where=True,casting=’same_kind’,order=’K’,dtype=None,subok=True[,signat

    2022年4月10日
    162

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号