2012-10-25 22 views
0

我有這樣的程序:setscal BigDecimal中

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

我有結果0.21但是當我想提取只是0.2我嘗試

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

我有這樣的錯誤i = 1時:

在java.math.BigDecimal.divideAndRound(BigDecimal.java:1439)在 java.math.BigDecimal.setScale(BigDecimal.java: 2390)維持在 NewClass.main(NewClass.java:30)

java.math.BigDecimal.setScale(BigDecimal.java:2437)我可以做什麼用i = 1到提取?

回答

6

您需要使用舍入模式的規模,對於您的情況下,將以下內容:

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

,你必須使用overloadedsetScale方法這需要四捨五入爲第二個參數。 是指它here

BigDecimal a = new BigDecimal("0.21556788990002"); 
    System.out.println(a.setScale(1,1)); //result 0.2 
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 
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