我有这个程序:
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提取什么?
答案 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