gpt4 book ai didi

java - 减去 BigDecimal 而不向上舍入

转载 作者:行者123 更新时间:2023-12-02 11:39:40 28 4
gpt4 key购买 nike

我有一个函数,它接收两个 BigDecimal 数字,即 bd1 和 bd2 作为参数。该函数应减去 bd1 - db2 并返回

bd1 和 bd2 的小数位数均为 2,结果的小数位数也应仅为 2但使用减法会扩展到完整的十进制表示形式我希望将比例设置为 2 并尝试使用 setScale ,但 setScale 是预期的舍入模式,不清楚使用哪种舍入模式来获得仅限于比例 2 的精确结果

需要获得精确的相减值 (bd1 - bd2),其比例为 2 。在这种情况下,我需要 15.04 而不进行舍入,因为我从另一个应用程序获取这些值,并且我不想通过添加舍入模式来更改这些值

    BigDecimal bd1 = new BigDecimal(30.18);
BigDecimal bd2 = new BigDecimal(15.14);

BigDecimal diff = bd1.subtract(bd2);
System.out.println("bd1.subtract(bd2) " + diff);

System.out.println("RoundingMode.DOWN " + diff.setScale(2, RoundingMode.DOWN));
System.out.println("RoundingMode.FLOOR " + diff.setScale(2, RoundingMode.FLOOR));

System.out.println("RoundingMode.UP " +diff.setScale(2, RoundingMode.UP));

System.out.println("RoundingMode.CEILING " + diff.setScale(2, RoundingMode.CEILING));

System.out.println("RoundingMode.HALF_UP " + diff.setScale(2, RoundingMode.HALF_UP));



Result
------
bd1.subtract(bd2) 15.03999999999999914734871708787977695465087890625
RoundingMode.DOWN 15.03
RoundingMode.FLOOR 15.03
RoundingMode.UP 15.04
RoundingMode.CEILING 15.04
RoundingMode.HALF_UP 15.04

实际结果是15.04

最佳答案

您正在使用 double 初始化 BigDecimal,因此它没有足够的精度。使用 String 作为构造函数的参数:

BigDecimal bd1 = new BigDecimal("30.18");
BigDecimal bd2 = new BigDecimal("15.14");

BigDecimal diff = bd1.subtract(bd2);
System.out.println("bd1.subtract(bd2) " + diff);

关于java - 减去 BigDecimal 而不向上舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48677190/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com