大十进制数减法不起作用

用户3309975

我在下面的程序中面临简单的问题。在下面的代码中,我只是减去数字,预期输出是“89.50”,但它正在打印 90。我可以知道原因并帮助我编写代码以获得预期输出。

public class BigDecimal_Prb {

  public static void main(String[] args) throws java.lang.Exception
  {
    MathContext mc = new MathContext(2); 
    List<BigDecimal> list = new ArrayList<BigDecimal>();
    list.add(BigDecimal.valueOf(30));
    list.add(BigDecimal.valueOf(120.00));

    BigDecimal [] nums = (BigDecimal[]) list.toArray(new BigDecimal[0]);
    BigDecimal reaminingAmt=nums[1].subtract(nums[0], mc);
    BigDecimal dedAmt=new BigDecimal(0.5);
    BigDecimal ans = reaminingAmt.subtract(dedAmt,mc);
    System.out.println(ans);
  }
}
用户3309975

是的。终于得到了。

不,这不是缩放问题。我发现的“解决方案”具有更改 BigDecimal.toString() 方法结果的副作用。但是,setScale() 的目的是微调对 BigDecimal 值执行的内部计算的结果。如果您只希望 BigDecimal 的比例为 2,因为这是您可以接受计算结果所需要的全部,那很好,请设置比例。但是,如果您使用 setScale() 以便您的输出显示“120.00”而不是“120.0”,那么您使用了错误的方法并且出于错误的原因而这样做,IMO。

如果您需要 2 的比例,请将所有实例创建更改为使用 BigDecimal(String) 构造函数。这将保留 .00 部分,然后您将获得您一直在寻找的 2 的比例。

public class BigDecimal_Prb {

public static void main(String[] args) throws java.lang.Exception
   {
    MathContext mc = new MathContext(4, RoundingMode.HALF_DOWN); 
    List<BigDecimal> list = new ArrayList<BigDecimal>();
    list.add(BigDecimal.valueOf(30));
    list.add(BigDecimal.valueOf(120.00));

    BigDecimal [] nums = (BigDecimal[]) list.toArray(new BigDecimal[0]);
    BigDecimal reaminingAmt=nums[1].subtract(nums[0], mc);
    BigDecimal dedAmt=new BigDecimal(0.5);
    BigDecimal ans = reaminingAmt.subtract(dedAmt,mc).setScale(2, RoundingMode.HALF_DOWN);
    System.out.println(ans.toString());
   }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

大十进制减法导致指数

来自分类Dev

rails十进制比例=> 2不起作用

来自分类Dev

MySQL ORDER BY 十进制值不起作用

来自分类Dev

大十进制数

来自分类Dev

Javascript十进制减法

来自分类Dev

我只需要得到两个十进制数,但似乎 toFixed() 不起作用

来自分类Dev

PHP将十六进制转换为十进制不起作用

来自分类Dev

基本二进制到十进制转换程序不起作用(Python)

来自分类Dev

pandas.isnull()在十进制类型上不起作用?

来自分类Dev

SQL选择带有十进制字段不起作用

来自分类Dev

将varchar转换为十进制在SQL Server上不起作用

来自分类Dev

Dapper查询可为空的十进制字段不起作用

来自分类Dev

ngx-mask-简单的十进制掩码不起作用

来自分类Dev

十进制精度的动态正则表达式不起作用

来自分类Dev

Angular 6:逗号分隔的十进制管道不起作用

来自分类Dev

在ORACLE SQL中用十进制减法

来自分类Dev

为什么八进制到十进制转换器在某些情况下不起作用?

来自分类Dev

递归减法不起作用

来自分类Dev

编写从二进制到十进制的转换形式-我的代码不起作用?(JavaScript和HTML5)

来自分类Dev

编写从二进制到十进制的转换形式-我的代码不起作用?(JavaScript和HTML5)

来自分类Dev

Java大十进制错误

来自分类Dev

PHP将大十进制数转换为十六进制

来自分类Dev

如何将非常大的十进制数转换为阶乘数系统?

来自分类Dev

如何将非常大的十进制数转换为阶乘数系统?

来自分类Dev

将大十进制数转换为Javascript中的字符串

来自分类Dev

Java - 如何使用货币格式将字符串转换为大十进制数

来自分类Dev

在mongo中减法查询不起作用?

来自分类Dev

MySQL Days减法在月末不起作用

来自分类Dev

在mongo中减法查询不起作用?

Related 相关文章

  1. 1

    大十进制减法导致指数

  2. 2

    rails十进制比例=> 2不起作用

  3. 3

    MySQL ORDER BY 十进制值不起作用

  4. 4

    大十进制数

  5. 5

    Javascript十进制减法

  6. 6

    我只需要得到两个十进制数,但似乎 toFixed() 不起作用

  7. 7

    PHP将十六进制转换为十进制不起作用

  8. 8

    基本二进制到十进制转换程序不起作用(Python)

  9. 9

    pandas.isnull()在十进制类型上不起作用?

  10. 10

    SQL选择带有十进制字段不起作用

  11. 11

    将varchar转换为十进制在SQL Server上不起作用

  12. 12

    Dapper查询可为空的十进制字段不起作用

  13. 13

    ngx-mask-简单的十进制掩码不起作用

  14. 14

    十进制精度的动态正则表达式不起作用

  15. 15

    Angular 6:逗号分隔的十进制管道不起作用

  16. 16

    在ORACLE SQL中用十进制减法

  17. 17

    为什么八进制到十进制转换器在某些情况下不起作用?

  18. 18

    递归减法不起作用

  19. 19

    编写从二进制到十进制的转换形式-我的代码不起作用?(JavaScript和HTML5)

  20. 20

    编写从二进制到十进制的转换形式-我的代码不起作用?(JavaScript和HTML5)

  21. 21

    Java大十进制错误

  22. 22

    PHP将大十进制数转换为十六进制

  23. 23

    如何将非常大的十进制数转换为阶乘数系统?

  24. 24

    如何将非常大的十进制数转换为阶乘数系统?

  25. 25

    将大十进制数转换为Javascript中的字符串

  26. 26

    Java - 如何使用货币格式将字符串转换为大十进制数

  27. 27

    在mongo中减法查询不起作用?

  28. 28

    MySQL Days减法在月末不起作用

  29. 29

    在mongo中减法查询不起作用?

热门标签

归档