Android BigDecimal如何使用写入?

时间:2014-08-21 06:32:27

标签: android rounding bigdecimal

我使用BigDecimal来舍入货币价值。我有疑问。

    float price = 0.71F;
    BigDecimal priceA = BigDecimal.valueOf(price).setScale(2, RoundingMode.FLOOR);
    //priceA == 0.70;

    float price = 8.71F;
    BigDecimal priceB = BigDecimal.valueOf(price).setScale(2, RoundingMode.FLOOR);
    //priceB == 8.71;

为什么?四舍五入怎么写?

1 个答案:

答案 0 :(得分:0)

永远不要从浮点数或双精度数构造BigDecimals。从int或字符串构造它们。浮动精度和双倍精度。

此代码按预期工作。我刚刚将类型从float更改为String:

public static void main(String[] args) {
  String doubleVal = "1.745";
  String doubleVal1 = "0.745";
  BigDecimal bdTest = new BigDecimal(  doubleVal);
  BigDecimal bdTest1 = new BigDecimal(  doubleVal1 );
  bdTest = bdTest.setScale(2, BigDecimal.ROUND_HALF_UP);
  bdTest1 = bdTest1.setScale(2, BigDecimal.ROUND_HALF_UP);
  System.out.println("bdTest:"+bdTest); //1.75
  System.out.println("bdTest1:"+bdTest1);//0.75, no problem
}