我正在尝试编写一个将钱存入变量的程序, 所以我使用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;
但这不符合我的要求。
答案 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;