我在計算一個百分比「因子」。也就是說,給定20%,將其轉換爲0.2(我的意圖是稍後將值乘以該值並獲得20%的值)。Java,BigDecimal。分區問題
無論如何,問題是用這段代碼相關:
public static void main(String[] args) {
int roundingMode = BigDecimal.ROUND_FLOOR;
BigDecimal hundred = new BigDecimal("100");
BigDecimal percentageFactor = null;
BigDecimal percentage = new BigDecimal("20");
BigDecimal value = new BigDecimal("500");
percentageFactor = percentage.divide(hundred, roundingMode);
float f = percentage.floatValue()/hundred.floatValue();
f = value.floatValue() * f;
BigDecimal aux = value.multiply(percentageFactor);
System.out.println("factor:"+percentageFactor.toString());
System.out.println("final falue:"+aux.toString());
System.out.println("Float Value:"+f);
}
我希望這樣做的結果是這樣的:
factor: 0.2
final value: 100
float value: 100
而是percentage.divide(hundred, roundingMode);
將返回零,一因此我得到:
factor:0
final falue:0
Float Value:100.0
我在做什麼錯?我怎樣才能正確地分兩位大數小數?
順便說一句,我使用BigDecimal
,因爲我會計算貨幣百分比,所以我想控制四捨五入。
如果要控制舍入,則根本不應使用浮點數,既不是浮點數也不是double。堅持BigDecimal。 – markusk 2009-05-25 19:03:23