【问题标题】:How to get Integer of BigDecimal without separator如何在没有分隔符的情况下获取 BigDecimal 的整数
【发布时间】:2014-11-27 13:30:37
【问题描述】:

我从 Money-Object 得到以下 BigDecimal:BigDecimal 49.99,我需要它作为 Integer 4999,所以我要求的一切都是摆脱分隔符。

我可以将这个 BigDecimal 作为 String 并删除分隔符并将其解析为 Integer,但我不认为这很漂亮。

BigDecimal bigPrice = moneyPrice.getValue();
Integer price = bigPrice.intValue();

仅对 49 使用此响应。

【问题讨论】:

  • 我看不出你想要这个的任何理由。 49.99 与 499.9 不同
  • 我需要将 € 转换为 Cents 以将其传递到另一个界面。所以 49.99 欧元到 4999 美分。

标签: java integer bigdecimal currency


【解决方案1】:

你需要的方法:

movePointRight(int n)

javadoc 链接:http://docs.oracle.com/javase/6/docs/api/java/math/BigDecimal.html#movePointRight(int)

示例:

    BigDecimal bd = new BigDecimal("398.0275");
    System.out.println(bd.movePointRight(bd.scale()));

输出:

3980275

如果你想使用号码,只需bd=bd.movePointRight(bd.scale());

【讨论】:

    【解决方案2】:

    试试这个代码:

    BigDecimal db = new BigDecimal("49.99");
    // multiply with 10^scale ( in your case 2)
    db = db.multiply(new BigDecimal(10).pow( db.scale()));
    System.out.println(db.intValue());
    

    【讨论】:

    • 谢谢,我想的方法很复杂。
    【解决方案3】:

    如果它是货币并且始终为 2 dp,您可以将其乘以 100。但是,作为 Davio cmets,您的代码应该清楚说明您这样做的原因。

    如果您想将 GB 英镑的价格转换为 GB 便士(100 便士一磅),那么将其乘以 100 是正确的做法。

    【讨论】:

      【解决方案4】:

      没有必要对BigDecimal 做任何数学运算;您可以直接调用myBigDecimal.unscaledValue() 来获取底层未缩放的BigInteger。

      【讨论】:

        猜你喜欢
        • 2014-09-16
        • 1970-01-01
        • 2018-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多