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

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


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


相关推荐

  • Python Faker的使用,你了解多少呢?

    Python Faker的使用,你了解多少呢?

    2021年5月24日
  • pycharm快速删除一行快捷键:ctrl+x(剪切掉)「建议收藏」

    pycharm快速删除一行快捷键:ctrl+x(剪切掉)「建议收藏」pycharm快速删除一行快捷键:ctrl+x(剪切掉)

    2022年8月26日
  • ie兼容性视图怎么设置_电脑找不到兼容性视图

    ie兼容性视图怎么设置_电脑找不到兼容性视图许多用户在升级操作系统之后,里面自带的ie浏览器也会跟着一起升级,然而有些网站可能需要使用低版本的ie浏览器才可以打开,该怎么办呢,其实我们只要设置ie兼容性视图模式就可以了,不过很多用户可能还不知道ie兼容性视图设置在哪,为此,小编这就告诉大家ie兼容性视图的详细设置方法。步骤阅读工具/原料IE浏览器方法/步骤11、在Windows10系统桌面,我们依次点击“开始/Windows附件/Inter…

    2022年9月8日
  • JAVA环境配置

    JAVA环境配置JAVA开发环境配置1window系统搭建java环境1.1下载JDK首先我们需要下载java开发工具包JDK,下载地址:http://www.oracle.com/technetwork

    2022年7月1日
  • 程序员如何接私活「建议收藏」

    马无夜草不肥,人无外财不富!最近有很多程序员朋友问我如何接私活?接私活的方法有很多种,根据你的实力以及社会资源等因素选择合适自己的方法:1、熟人介绍,利用同事、同学、老顾客等熟人关系介绍订单,这个方法的好处就是,大家都有一定了解以及以及信任基础,很少存在骗单或者偷稿的行为,做的好可以成为长期稳定的合作伙伴,少去推广接单的痛苦与烦恼!2、网络平台接活,现在的网络接单平台有很多,选取一两个适合自己的网…

    2022年4月16日
  • embedding实现_embedded option

    embedding实现_embedded option假设词汇量为100万个时的CBOW模型如下,输入层和输出层存在100万个神经元。下面两个问题导致耗时严重。问题一、输入层的one-hot表示和权重矩阵的乘积。one-hot表示占用内存过多,计算one-hot表示与权重矩阵的乘积,需要花费大量时间。问题二、中间层和权重矩阵的乘积以及Softmax层的计算。需要大量的计算,花费大量时间。解决问题一:计算one-hot表示矩阵和权重矩阵的乘积,其实就是将权重矩阵的某个特定的行取出来。如下图所示。Embedding层

    2022年9月6日

发表回复

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

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