setscale方法的用法_BigDecimal的setScale()方法无效

setscale方法的用法_BigDecimal的setScale()方法无效最近在使用BigDecimal进行四舍五入时,发现setScale()方法设置的精度值并没有起作用,一度让我怀疑起是否jdk有bug,代码如下:错误代码doubled=7.199999999999999;BigDecimaldecimal=newBigDecimal(String.valueOf(d));decimal.setScale(2,BigDecimal.ROUND_HAL…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

最近在使用BigDecimal进行四舍五入时,发现setScale()方法设置的精度值并没有起作用,一度让我怀疑起是否jdk有bug,代码如下:

错误代码

double d = 7.199999999999999;

BigDecimal decimal = new BigDecimal(String.valueOf(d));

decimal.setScale(2, BigDecimal.ROUND_HALF_UP);

System.out.println(decimal.scale());

System.out.println(decimal.doubleValue());

System.out.println(decimal.toString());

以上代码目的:将7.199999999999999保留两位小数后输出。 输出结果:

15

7.199999999999999

7.199999999999999

可以看到,decimal.setScale(2, BigDecimal.ROUND_HALF_UP);并没有起作用。

正确代码

double d = 7.199999999999999;

BigDecimal decimal = new BigDecimal(String.valueOf(d));

//重新生成了新的对象

BigDecimal decimal2 = decimal.setScale(2, BigDecimal.ROUND_HALF_UP);

System.out.println(“—————decimal1————-“);

System.out.println(decimal.scale());

System.out.println(decimal.doubleValue());

System.out.println(decimal.toString());

System.out.println(“—————decimal2————-“);

System.out.println(decimal2.scale());

System.out.println(decimal2.doubleValue());

System.out.println(decimal2.toString());

与错误代码不同的是,用decimal2接收decimal.setScale(2, BigDecimal.ROUND_HALF_UP)的返回结果,并操作decimal2,输出如下:

—————decimal1————-

15

7.199999999999999

7.199999999999999

—————decimal2————-

2

7.2

7.20

总结

decimal.setScale(2, BigDecimal.ROUND_HALF_UP)会生成新的对象,设置的精度值只对新对象有效,对原对象无效,需注意。 一般来说,可以使用链式方式构造新对象并设置精度:

BigDecimal decimal = new BigDecimal(String.valueOf(d)).setScale(2, BigDecimal.ROUND_HALF_UP);

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 整数规划

    整数规划2、整数规划2.1定义规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。2.2分类变量全限制为整数时,称纯(完全)整数规

    2022年7月4日
    33
  • win10 虚拟显示器_电脑怎么设置虚拟显示器

    win10 虚拟显示器_电脑怎么设置虚拟显示器2017.7.7最近在做虚拟化,需要在虚机上虚拟出一个显示器,我使用的虚机是windows10,虚机里面有一张透传显卡(可看做是物理显卡),我尝试过一些方法,比如编写一个虚拟的WDDM显卡驱动,然后在显卡驱动上接上一个显示器,该方法是有效的,可以成功虚拟出一个显示器,但是在虚拟显示器上渲染数据使用的渲染引擎没有用到透传显卡,在性能上达不到我的要求,所以只好放弃用这种方法。于是,通过阅…

    2022年8月21日
    33
  • 怪诞行为学丹 . 艾瑞里_怪诞心理学epub

    怪诞行为学丹 . 艾瑞里_怪诞心理学epub郑重声明:本号收录的电子书均来源于互联网或网友分享,链接内容仅作分享交流学习使用,不用于任何商业用途,版权归原作者和出版社所有,如果喜欢,请支持和购买正版,谢谢。下载地址:http://pan.63

    2022年8月3日
    3
  • 【HDU】5248-序列变换(贪心+二分)「建议收藏」

    【HDU】5248-序列变换(贪心+二分)

    2022年1月19日
    31
  • ByteBuffer详解「建议收藏」

    ByteBuffer详解「建议收藏」一、前言前一篇文章我们介绍了Android中直播视频技术的基础大纲知识,这里就开始一一讲解各个知识点,首先主要来看一下视频直播中的一个重要的基础核心类:ByteBuffer,这个类看上去都知道了,是字节缓冲区处理字节的,这个类的功能非常强大,也在各个场景都有用到,比如网络数据底层处理,特别是结合网络通道信息处理的时候,还有就是后面要说到的OpenGL技术也要用到,当然在视频处理中也是很重要

    2022年10月3日
    0
  • 查看数据库里阻塞和死锁情况.sql

    查看数据库里阻塞和死锁情况.sql

    2021年4月25日
    234

发表回复

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

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