处理金钱和大十进制

时间:2012-08-22 07:04:57

标签: java bigdecimal money-format

我正在尝试编写一个将钱存入变量的程序, 所以我使用Bigdecimal类型,因为这里的其他成员建议..  但我要做的就是这个......用户可以输入他想要的方式,他可以输入

 24
 or
 24.0
 or
 24.00

因此您可以看到我为用户提供了自己键入的灵活性。但最后变量将存储在一个数组(BigDecimal数组)中,因此当它存储时我想存储并且只有2个十二进制位置。为什么我这样说,如果用户键入24我想存储24.00 NOT 24或24.0只是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;

但这不符合我的要求。

3 个答案:

答案 0 :(得分:4)

请记住,BigDecimal对象是不可变的。所以,当你做的时候

balintake.setScale(2,RoundingMode.HALF_UP);

你应该将它分配给一个变量,比如

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

答案 1 :(得分:1)

java.math.BigDecimal.setScale(int)会返回一个 new BigDecimal,而不是改变原来的那个。

  

请注意,由于BigDecimal对象是不可变的,因此调用它   相反,方法不会导致原始对象被修改   通常使用名为setX mutate field X的方法。   相反,setScale返回具有适当比例的对象;该   返回的对象可能会或可能不会被新分配。

答案 2 :(得分:0)

对于初学者,你从未初始化变量“bala”

因此,您将“balintake”设置为Scanner的下一个小十进制数。 “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;