1

我正在尝试编写一个将钱存储在变量中的程序,所以我使用 Bigdecimal 类型,正如其他成员在这里所建议的那样。但我想要做的是......用户可以输入他想要的任何方式意思是说,他可以打字

 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;

但这不符合我的要求。

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”设置为扫描仪的下一个大小数。“setScale”方法不会改变 BigDecimal 本身,因为 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 回答