1

I am trying to write a program that stores money in a variable, so I am using Bigdecimal type as it was advised by other memebers here.. But what I am trying to do is this.. user can type in what ever way he wants means to say, he can type

 24
 or
 24.0
 or
 24.00

so as you can see that I am giving the user flexibility to type at his own convenience. But in the end the variable will be stored in an array (BigDecimal array) so when it stores I want to store with and only 2decimal places. Why I say that is if the user types in 24 I want to store 24.00 NOT 24 or 24.0 JUST 24.00 or if he enters 24.00 then that will be stored with out any modification done to it.. how to do this.. Sample code provided below.

    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;

But this is not working as according to my requirements.

4

3 に答える 3

4

BigDecimal オブジェクトは不変であることに注意してください。だから、あなたがするとき

balintake.setScale(2,RoundingMode.HALF_UP);

次のように、変数に割り当てる必要があります

balintake = balintake.setScale(2,RoundingMode.HALF_UP);
于 2012-08-22T07:22:08.550 に答える
1

java.math.BigDecimal.setScale(int)は、元の BigDecimal を変更する代わりに、新しいBigDecimal を返します。

BigDecimal オブジェクトは不変であるため、setX という名前のメソッドがフィールド X を変更する通常の規則とは異なり、このメソッドを呼び出しても元のオブジェクトは変更されないことに注意してください。代わりに、setScale は適切なスケールのオブジェクトを返します。返されるオブジェクトは、新しく割り当てられる場合と割り当てられない場合があります。

于 2012-08-22T07:20:56.727 に答える
0

まず、変数「bala」を初期化していません

したがって、"balintake" をスキャナの次の大きな 10 進数に設定します。BigDecimal は不変であるため、「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;
于 2012-08-22T07:21:27.997 に答える