簡體   English   中英

處理金錢和大十進制

[英]dealing with money and Big Decimal

我正在嘗試編寫一個將錢存儲在變量中的程序,因此我使用的是Bigdecimal類型,如此處其他成員建議的那樣。.但是我正在嘗試這樣做。.用戶可以按自己想要的方式鍵入意思是說,他可以打字

 24
 or
 24.0
 or
 24.00

因此您可以看到,我為用戶提供了方便的打字方式。 但是最后變量將存儲在一個數組(BigDecimal數組)中,所以當它存儲時,我只想存儲2個小數位。 為什么要這樣說呢?如果用戶輸入24,我想存儲24.00,而不是24.00,而不是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;

但這不符合我的要求。

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

balintake.setScale(2,RoundingMode.HALF_UP);

您應該將其分配回一個變量,例如

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

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

請注意,由於BigDecimal對象是不可變的,因此調用該方法不會導致原始對象被修改,這與使用名為setX的方法將變量X更改為字段X的通常約定相反。 返回的對象可能是也可能不是新分配的。

對於初學者,您從未初始化變量“ bala”

因此,您將“ balintake”設置為掃描儀的下一個大十進制。 “ setScale”方法不會更改BigDecimal本身,因為BigDecimals是不可變的,它會返回一個新的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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM