在BigDecimal中的setscal

时间:2012-10-25 16:05:31

标签: java bigdecimal

我有这个程序:

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)at at   java.math.BigDecimal.setScale(BigDecimal.java:2390)at   java.math.BigDecimal.setScale(BigDecimal.java:2437)at   NewClass.main(NewClass.java:30)

我可以用i = 1提取什么?

4 个答案:

答案 0 :(得分:6)

您需要使用舍入模式进行缩放,对于您的情况,它将具有以下内容:

System.out.println(a.setScale(1, RoundingMode.FLOOR));

答案 1 :(得分:1)

BTW这类似于

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

答案 2 :(得分:0)

你必须使用overloaded setScale方法,它将四舍五入作为第二个参数。 参考它here

    BigDecimal a = new BigDecimal("0.21556788990002");
    System.out.println(a.setScale(1,1)); //result 0.2

答案 3 :(得分: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