0

我有这个程序:

BigDecimal a = new BigDecimal("0.21556788990002");
        System.out.println(a.setScale(2));

我有结果0.21但是当我想提取只是0.2我尝试

for(int i=1; i<10; i++) System.out.println(a.setScale(i));

当 i = 1 时出现此错误:

在 java.math.BigDecimal.divideAndRound(BigDecimal.java:1439) 在 java.math.BigDecimal.setScale(BigDecimal.java:2390) 在 java.math.BigDecimal.setScale(BigDecimal.java:2437) 在 NewClass.main(新类.java:30)

我可以做什么来提取 i = 1 ?

4

4 回答 4

6

您需要使用舍入模式进行缩放,对于您的情况,它将如下:

System.out.println(a.setScale(1, RoundingMode.FLOOR));
于 2012-10-25T16:09:53.990 回答
1

顺便说一句,这类似于

double a = 0.21556788990002;

for (int i = 1; i < 10; i++)
    System.out.printf("%." + i + "f%n", a);

印刷

0.2
0.22
0.216
0.2156
0.21557
0.215568
0.2155679
0.21556789
0.215567890
于 2012-10-25T16:16:41.133 回答
0

您必须使用将舍入作为第二个参数的overloaded setScale 方法。参考这里

    BigDecimal a = new BigDecimal("0.21556788990002");
    System.out.println(a.setScale(1,1)); //result 0.2
于 2012-10-25T16:11:33.693 回答
0

我认为您也可以使用十进制格式:

        BigDecimal a = new BigDecimal("0.21556788990002");

        //change any desired format using 0 or #
        DecimalFormat dFormat = new DecimalFormat("0.0");
        System.out.println(dFormat.format(a)); //< - print 0.2

        DecimalFormat dFormat = new DecimalFormat("#.0");
        System.out.println(dFormat.format(a)); //< - print .2

        DecimalFormat dFormat = new DecimalFormat("0.00");
        System.out.println(dFormat.format(a)); //< - print 0.21
于 2012-10-25T16:17:00.127 回答