Java 使用正确的小数比例格式化数字

Java 使用正确的小数比例格式化数字,java,bigdecimal,decimalformat,Java,Bigdecimal,Decimalformat,我需要格式化一个小数点后2位的数字。原始数字可以是整数,也可以是小数点后三位的数字。但是,无论原始数字是整数还是小数点,结果的格式应始终为逗号和两位小数 当原始num=5656.342==>我需要5656.34 当原始num=5656==>我需要5656.00 当原始num=5656.7==>我需要5656.70 我正在使用下面的代码格式化代码,但在上述2和3种情况下,它无法添加两位小数 String originalNumber = "56565656.7"; BigDecimal b = n

我需要格式化一个小数点后2位的数字。原始数字可以是整数,也可以是小数点后三位的数字。但是,无论原始数字是整数还是小数点,结果的格式应始终为逗号和两位小数

当原始num=5656.342==>我需要5656.34 当原始num=5656==>我需要5656.00 当原始num=5656.7==>我需要5656.70 我正在使用下面的代码格式化代码,但在上述2和3种情况下,它无法添加两位小数

String originalNumber = "56565656.7";
BigDecimal b = new BigDecimal(originalNumber).setScale(2, BigDecimal.ROUND_HALF_UP);
String formattedNumber = NumberFormat.getInstance().format(b);
请让我知道是否有任何方法可以有效地实现这一点

提前谢谢。

看一下课堂

或者,您可以从BigDecimal类中选择方法

        BigDecimal bg1 = new BigDecimal("56565656.342");
        BigDecimal bg2 = new BigDecimal("56565656.00");
        BigDecimal bg3 = new BigDecimal("56565656.70");

        DecimalFormat df = new DecimalFormat("###,###.00");
        System.out.println(df.format(bg1.doubleValue()));
        System.out.println(df.format(bg2.doubleValue()));
        System.out.println(df.format(bg3.doubleValue()));

        System.out.println(bg1.setScale(2, BigDecimal.ROUND_HALF_UP));
        System.out.println(bg2.setScale(2, BigDecimal.ROUND_HALF_UP));
        System.out.println(bg3.setScale(2, BigDecimal.ROUND_HALF_UP));
收益率:

56,565,656.34
56,565,656.00
56,565,656.70
56565656.34
56565656.00
56565656.70
编辑:还忘了提到:如果您追求精度,我建议您使用setScale方法,使用.doubleValue方法将产生一个可能导致精度损失的double。

看看这个类

或者,您可以从BigDecimal类中选择方法

        BigDecimal bg1 = new BigDecimal("56565656.342");
        BigDecimal bg2 = new BigDecimal("56565656.00");
        BigDecimal bg3 = new BigDecimal("56565656.70");

        DecimalFormat df = new DecimalFormat("###,###.00");
        System.out.println(df.format(bg1.doubleValue()));
        System.out.println(df.format(bg2.doubleValue()));
        System.out.println(df.format(bg3.doubleValue()));

        System.out.println(bg1.setScale(2, BigDecimal.ROUND_HALF_UP));
        System.out.println(bg2.setScale(2, BigDecimal.ROUND_HALF_UP));
        System.out.println(bg3.setScale(2, BigDecimal.ROUND_HALF_UP));
收益率:

56,565,656.34
56,565,656.00
56,565,656.70
56565656.34
56565656.00
56565656.70

编辑:还忘了提到:如果您追求精度,我建议您使用setScale方法,使用.doubleValue方法将产生一个可能导致精度损失的double。

DecimalFormat类将为您解决此问题。。。。您必须指定适当的格式。

DecimalFormat类将为您完成此操作。。。。您必须指定适当的格式。

只需使用NumberFormat并指定小数位数和舍入方法即可打印:

String [] originalNumbers = new String[] {
   "56565656.342",
   "56565656.7",
   "56565656"
};

NumberFormat df = NumberFormat.getInstance();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(2);
df.setRoundingMode(RoundingMode.HALF_UP);

for (String number : originalNumbers) {
   String formattedNumber = df.format(new BigDecimal(number));

   System.out.println(formattedNumber);
}
将打印

56,565,656.34
56,565,656.70
56,565,656.00
**编辑**

将产生与上述给定代码完全相同的结果。

只需使用NumberFormat并指定小数位数和舍入方法即可打印:

String [] originalNumbers = new String[] {
   "56565656.342",
   "56565656.7",
   "56565656"
};

NumberFormat df = NumberFormat.getInstance();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(2);
df.setRoundingMode(RoundingMode.HALF_UP);

for (String number : originalNumbers) {
   String formattedNumber = df.format(new BigDecimal(number));

   System.out.println(formattedNumber);
}
将打印

56,565,656.34
56,565,656.70
56,565,656.00
**编辑**


将生成与上述给定代码完全相同的结果。

如果在构造DecimalFormat DecimalFormat df=new DecimalFormat.00时使用以下命令;前三个println将以小数点后的2位数字进行打印。如果在构造DecimalFormat DecimalFormat df=新DecimalFormat.00时使用以下内容;前三个println将以小数点后两位数字打印。您的答案太模糊了。如果你只花了几行解释某件事,而你没有提供一行代码,你可以肯定答案是不够的。你的答案太模糊了。如果你只花了几行解释某件事,而你没有提供一行代码,你可以肯定答案是不够的。