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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • kprobe分析内核kworker占用CPU 100%问题总结

    kprobe分析内核kworker占用CPU 100%问题总结kprobe分析内核kworker占用CPU100%问题总结CreatebyBillow.Jen,2020.3.8前言[引用]有的工程师在线上出问题的时候,非常慌乱,会去胡乱猜测可能的原因,但又缺乏任何证据去支持或者否证他的猜测与假设。他甚至会在线上反复地试错,反复地折腾,搞得一团乱麻,毫无头绪,让自己和身边的同事都很痛苦,白白浪费了宝贵的排错时间。但是当我们有了动态追踪技术之后,排…

    2022年9月24日
    1
  • 小程序 轮播图

    小程序 轮播图轮播图:cssswiper{height:400rpx;}swiper-itemimage{width:100%;height:100%;}.swiper-container{position:relative;margin-top:-300rpx;}.swiper-container.swiper{height:300r…

    2022年5月11日
    38
  • 20款知名PHP集成环境推荐与优缺点分析、php环境大全推荐(PHP环境搭建包)

    20款知名PHP集成环境推荐与优缺点分析、php环境大全推荐(PHP环境搭建包)20款知名PHP集成环境推荐与优缺点分析、php环境大全推荐(PHP环境搭建包)、PHP环境搭建、PHP集成环境搭建,最好用的20个php环境搭建工具推荐

    2022年4月19日
    468
  • sqlserver 视图创建索引_Oracle创建索引

    sqlserver 视图创建索引_Oracle创建索引一、索引1、添加索引createindex索引对象名on索引对应表名(表内索引对象字段名);例:需创建包含userid属性的userinfo表。createindexuseridonsystem.userinfo(userid);2、删除索引dropindex索引对象名;例:dropindexuserid;二、视图(并不是真实存在的一张表)1、创建视图createview视图名(学号,姓名,科目,成绩)asselect对应在表格中的字段名from涉

    2022年9月7日
    0
  • 免费的集群软件_服务器集群软件

    免费的集群软件_服务器集群软件概述 IBM高可用性集群软件(HighAvailabilityClusterMultiprocessing(HACMPTM))支持广泛的配置,为集群管理员提供了非常高的灵活性。这种灵活性带来了多种的选择:有许多可行的集群配置可以通过一般的审核以及上线运行,但是却没有优化以提供应有的可用性。本文讨论了集群设计人员可以做出的选择,从可选方案中提出建议,以帮助最高的可用性级别。 

    2022年10月15日
    0
  • Mysql学习——MySQL导入导出.sql文件及常用命令

    Mysql学习——MySQL导入导出.sql文件及常用命令在日常学习和工作,难免不了使用Mysql数据库,有时候需要导入导出数据库,或者其中的数据表。下面是我自己整理的一些东西!

    2022年2月24日
    29

发表回复

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

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