2012-08-22 26 views
1

我想写一个程序,存储钱在一个变量, 所以我使用Bigdecimal类型,因为它被其他memebers建议在这里.. 但我想要做的是这个..用户可以输入什么都这样,他希望的意思是说,他可以输入处理钱和大十进制

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; 

但是这不符合我的要求。

+0

如果我理解正确的话,你更关心什么得到比获取存储显示,对不对?如果是这样,你可以控制打印过程中的精度(根据你打印的地方,也就是在控制台或某个用户​​界面中) – Vikdor

+0

@Vikdor嘿,我不得不在后面的bigdecimal数组上进行搜索,采用不同的方法..所以在这一点上,我也需要做同样的事情给用户的灵活性,然后转换为2位的地方,因为这是存储在搜索中。所以一般来说,我试图使它标准化。 – JackyBoi

+0

你不能简单地将你的值存储为整数,例如'2400'?那么你只需要担心从用户提供的可能的十进制表示形式到这个整数值的转换。 –

回答

4

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

balintake.setScale(2,RoundingMode.HALF_UP); 

,你应该将其指定为回一个变量,像

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

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

注意,由于BigDecimal对象是不可变的,这 方法的调用不会导致初始对象被修改,相反 名为setX变异字段X 而不必方法的通常惯例,setScale返回具有适当比例的对象;返回的对象可能会或可能不会被新分配。

0

对于初学者来说,你永远不会初始化变量“巴拉”

所以你设置“balintake”是扫描仪的下一个大小数。 由于BigDecimals是不可变的,所以“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; 
相关问题