我使用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;
为什么?四舍五入怎么写?
答案 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
}