Java 处理货币和大小数

Java 处理货币和大小数,java,bigdecimal,money-format,Java,Bigdecimal,Money Format,我想写一个程序,把钱存储在一个变量中, 所以我使用的是Bigdecimal类型,正如这里其他成员建议的那样。。 但我想做的是。。用户可以输入任何他想要的方式,也就是说,他可以输入 24 or 24.0 or 24.00 因此,正如您所看到的,我为用户提供了在其方便的情况下键入内容的灵活性。但最终变量将存储在一个数组BigDecimal数组中,所以当它存储时,我只想存储2个小数点。我之所以这么说,是因为如果用户输入24,我想存储24.00,而不是24或24.0,只是24.00,或者如果

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

 24
 or
 24.0
 or
 24.00
因此,正如您所看到的,我为用户提供了在其方便的情况下键入内容的灵活性。但最终变量将存储在一个数组BigDecimal数组中,所以当它存储时,我只想存储2个小数点。我之所以这么说,是因为如果用户输入24,我想存储24.00,而不是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;
但这不符合我的要求。

返回一个新的BigDecimal,而不是对原始的BigDecimal进行变异

请注意,由于BigDecimal对象是不可变的,因此 方法不会导致修改原始对象,相反 按照通常的惯例,将方法命名为setX mutate field X。 相反,setScale返回具有适当比例的对象;这个 返回的对象可能是新分配的,也可能不是新分配的

返回新的BigDecimal,而不是对原始BigDecimal进行变异

请注意,由于BigDecimal对象是不可变的,因此 方法不会导致修改原始对象,相反 按照通常的惯例,将方法命名为setX mutate field X。 相反,setScale返回具有适当比例的对象;这个 返回的对象可能是新分配的,也可能不是新分配的


首先,您从未初始化过变量bala

因此,您将BalIntain设置为扫描仪的下一个大小数。 setScale方法不会更改BigDecimal本身,因为BigDecimal是不可变的,它会返回一个新的BigDecimal和scale集

我相信这就是你想要的:

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;

首先,您从未初始化过变量bala

因此,您将BalIntain设置为扫描仪的下一个大小数。 setScale方法不会更改BigDecimal本身,因为BigDecimal是不可变的,它会返回一个新的BigDecimal和scale集

我相信这就是你想要的:

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;

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

balintake.setScale(2,RoundingMode.HALF_UP);
您应该将其分配回一个变量,如

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

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

balintake.setScale(2,RoundingMode.HALF_UP);
您应该将其分配回一个变量,如

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

如果我理解正确的话,你更关心显示什么而不是存储什么,对吗?如果是这样,您可以根据打印位置(即在控制台上或在某些计算机中)控制打印期间的精度UI@Vikdor嘿,伙计,我以后还要用另一种方法在bigdecimal数组上搜索。。因此,在这方面,我也需要做同样的事情,给用户灵活性,然后转换到2个特定的位置,因为这是存储在搜索中的位置。所以一般来说,我试图使它标准化。你能不能不简单地将你的值存储为整数,例如2400?然后,您只需要担心从用户提供的可能的十进制表示形式到该整数值的转换。您可以使用DecimalFormat来满足此要求……如果我理解正确,您更关心显示的内容而不是存储的内容,对吗?如果是这样,您可以根据打印位置(即在控制台上或在某些计算机中)控制打印期间的精度UI@Vikdor嘿,伙计,我以后还要用另一种方法在bigdecimal数组上搜索。。因此,在这方面,我也需要做同样的事情,给用户灵活性,然后转换到2个特定的位置,因为这是存储在搜索中的位置。所以一般来说,我试图使它标准化。你能不能不简单地将你的值存储为整数,例如2400?然后,您只需要担心从用户提供的可能的十进制表示形式到该整数值的转换。。。。