2012-08-22 28 views
1

我想寫一個程序,存儲錢在一個變量, 所以我使用Bigdecimal類型,因爲它被其他memebers建議在這裏.. 但我想要做的是這個..用戶可以輸入什麼都這樣,他希望的意思是說,他可以輸入處理錢和大十進制

24 
or 
24.0 
or 
24.00 

所以你可以看到,我給用戶的靈活性,在自己方便的輸入。但最後變量將存儲在一個數組(BigDecimal數組)中,所以當它存儲時,我只想存儲2個十進制的地方。爲什麼我這麼說,如果用戶輸入24我想存儲24.00 NOT 24或24.0 JUST 24.00或者如果他輸入24.00那麼這將被存儲而無需對其做任何修改..如何做到這一點.. 示例代碼如下所述。

BigDecimal bala; 
    BigDecimal balintake; 
    static BigDecimal[] bal= new BigDecimal[20]; 
    Scanner sc = new Scanner(System.in); 
    balintake = sc.nextBigDecimal(); 

    bala.setScale(2,RoundingMode.HALF_UP); 
    bal[0] = bala; 

但是這不符合我的要求。

+0

如果我理解正確的話,你更關心什麼得到比獲取存儲顯示,對不對?如果是這樣,你可以控制打印過程中的精度(根據你打印的地方,也就是在控制檯或某個用戶​​界面中) – Vikdor

+0

@Vikdor嘿,我不得不在後面的bigdecimal數組上進行搜索,採用不同的方法..所以在這一點上,我也需要做同樣的事情給用戶的靈活性,然後轉換爲2位的地方,因爲這是存儲在搜索中。所以一般來說,我試圖使它標準化。 – JackyBoi

+0

你不能簡單地將你的值存儲爲整數,例如'2400'?那麼你只需要擔心從用戶提供的可能的十進制表示形式到這個整數值的轉換。 –

回答

4

記住BigDecimal對象是不可變的。所以,當你做

balintake.setScale(2,RoundingMode.HALF_UP); 

,你應該將其指定爲回一個變量,像

balintake = balintake.setScale(2,RoundingMode.HALF_UP); 
1

java.math.BigDecimal.setScale(int)返回一個新的 BigDecimal而不是改變原來的一個。

注意,由於BigDecimal對象是不可變的,這 方法的調用不會導致初始對象被修改,相反 名爲setX變異字段X 而不必方法的通常慣例,setScale返回具有適當比例的對象;返回的對象可能會或可能不會被新分配。

0

對於初學者來說,你永遠不會初始化變量「巴拉」

所以你設置「balintake」是掃描儀的下一個大小數。 由於BigDecimals是不可變的,所以「setScale」方法不會更改BigDecimal本身,它會返回一個新的BigDecimal並設置尺​​度。

我相信這是你想要什麼:

BigDecimal balintake; 
BigDecimal[] bal= new BigDecimal[20]; 
Scanner sc = new Scanner(System.in); 
balintake = sc.nextBigDecimal(); 

balintake = balintake.setScale(2,RoundingMode.HALF_UP); 
bal[0] = balintake; 
相關問題