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


相关推荐

  • matlab逆变器仿真程序,PWM逆变器Matlab仿真「建议收藏」

    matlab逆变器仿真程序,PWM逆变器Matlab仿真「建议收藏」PWM逆变器Matlab仿真摘要在本设计中,首先,针对课设题目要求,进行了系统的总体方案选择,以及各功能模块的方案论证和选择。选择通过升压斩波电路将输入直流电压升高,再利用全桥逆变方式将直流电转换成50HZ的交流电,控制部分采用PWM斩波控制技术。接着,对各功能模块进行了详细的原理分析和电路设计,同时也对可能出现的直流不平衡等问题进行了考虑。并最终通过MATLAB来实现PWM逆变器…

    2022年5月27日
    28
  • 3.1 学习率(learning rate)的选择

    3.1 学习率(learning rate)的选择1.什么是学习率调参的第一步是知道这个参数是什么,它的变化对模型有什么影响。(1)要理解学习率是什么,首先得弄明白神经网络参数更新的机制-梯度下降+反向传播。参考资料:https://www.cnblogs.com/softzrp/p/6718909.html。总结一句话:将输出误差反向传播给网络参数,以此来拟合样本的输出。本质上是最优化的一个过程,逐步趋向于最优解。但是每一次更新参数利用…

    2022年6月11日
    33
  • hanoi 塔问题_Hanoi塔

    hanoi 塔问题_Hanoi塔importjava.util.Scanner;/* *汉罗塔问题 */publicclassHanoiExec{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubSystem.out.println(“请输入盘子数n”);Scanner

    2022年10月12日
    2
  • [数据仓库]分层概念,ODS,DM,DWD,DWS,DIM的概念「建议收藏」

    [数据仓库]分层概念,ODS,DM,DWD,DWS,DIM的概念「建议收藏」ODS是什么?ODS全称是OperationalDataStore,操作数据存储.“面向主题的”,数据运营层,也叫ODS层,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的ETL之后,装入本层。本层的数据,总体上大多是按照源头业务系统的分类方式而分类的。但是,这一层面的数据却不等同于原始数据。在源数据装入这一层时,要进行诸如去噪(例如有一条数据中人的年龄是300岁,这种属于异常数据,就需要提前做一些处理)、去重(例如在个人资料表中,同一ID却有两条重复

    2022年4月19日
    109
  • android获取uuid_android默认允许获取位置

    android获取uuid_android默认允许获取位置获取UUID

    2022年8月10日
    5
  • SpringBoot+TkMybatis之事务回滚失效[通俗易懂]

    SpringBoot整合TkMybatis做单元测试时,回滚失效@Transactional@Rollback添加注解后,检查数据库表的设置引擎要使用InnoDB,不要使用MyISAM,后者不支持事务保存后再次测试,即可成功以下文章可供参考SpringBoot整合TkMyBatis…

    2022年4月15日
    41

发表回复

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

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