【问题标题】:BigDecimal - comparing invariant to DecimalFormatBigDecimal - 将不变量与 DecimalFormat 进行比较
【发布时间】:2012-08-23 17:27:07
【问题描述】:

我使用 ###,###.## 格式生成一个 BIgDecimal,结果为 660,000.00,然后我尝试将其与 new BigDecimal(660000.00) 进行比较,但每次都返回 false。有没有办法将不变的值与它们创建的初始格式进行比较?

【问题讨论】:

    标签: java bigdecimal


    【解决方案1】:

    这是因为两个BigDecimals比例不同:

    System.out.println(new BigDecimal("660000.00").scale()); // 2
    System.out.println(new BigDecimal(660000.00).scale());   // 0
    

    要在不考虑规模的情况下比较它们,您可以这样做:

    BigDecimal bd1 = new BigDecimal("660000.00");
    BigDecimal bd2 = new BigDecimal(660000.00);
    
    int s = Math.max(bd1.scale(), bd2.scale());
    .. bd1.setScale(s).equals(bd2.setScale(s)) ..   // == true.
    

    旁注:请注意双字面值,例如.1,并不代表实际值 0.1,而是它的近似值。 (这是由于浮点表示不准确造成的。)这可以通过做来看到

    System.out.println(new BigDecimal(.1));
    

    打印 0.1000000000000000055511151231257827021181583404541015625

    但是,new BigDecimal(".1") 确实代表 .1,这就是原因

    new BigDecimal(.1).equals(new BigDecimal(".1"))
    

    是假的。

    【讨论】:

    • 那么,任何解决方案都会涉及使秤相同吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 2022-01-15
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 2020-10-20
    相关资源
    最近更新 更多