首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JRE 7/8/11中获取RoundingModes -半向上/甚至是大十进制的舍入错误

在JRE 7/8/11中获取RoundingModes -半向上/甚至是大十进制的舍入错误
EN

Stack Overflow用户
提问于 2022-02-08 11:34:51
回答 1查看 23关注 0票数 2

当我尝试下面的代码时,我得到了两个奇怪的输出

42.01 42.01

82.00 82.00

有人确定为什么会发生这种事吗?并且可以在java 7/8中使用下面的RoundingMode for BigDecimal来解决这个问题。

代码语言:javascript
复制
import java.math.*;
class HelloWorld {
    public static void main(String[] args) {
    
      BigDecimal hup = new BigDecimal(42.0050).setScale(2,
                                            RoundingMode.HALF_UP);
      BigDecimal hev = new BigDecimal(42.0050).setScale(2,
                                        RoundingMode.HALF_EVEN);                                    
        
      BigDecimal hup2 = new BigDecimal(82.0050).setScale(2,
                                            RoundingMode.HALF_UP);
      BigDecimal hev2 = new BigDecimal(82.0050).setScale(2,
                                        RoundingMode.HALF_EVEN);
     
     
       System.out.println(hup);
       System.out.println(hev);
       System.out.println(hup2);
       System.out.println(hev2);
}} 

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-08 12:20:05

这是个有趣的问题。

将您的输入更改为此,并查看不同之处:

代码语言:javascript
复制
BigDecimal hup = new BigDecimal("42.0050").setScale(2,
    RoundingMode.HALF_UP);
BigDecimal hev = new BigDecimal("42.0050").setScale(2,
    RoundingMode.HALF_EVEN);

其结果将是:

42.01 42.00

实际上,问题在于如何给出BigDecimal的输入。

例如,在IntelliJ中,当使用BigDecimal不作为字符串时会看到警告:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71033204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档