import java.io.*; import java.text.*; import java.math.*; //import java.util.*; public class gaojingdutest { public static void main(String[] args){ //double 型数据的小数点控制输出 double a=1113.141592653; DecimalFormat formatter1=new DecimalFormat("#.000000"); System.out.println(formatter1.format(a)); //BigDecimal型数据的小数点控制输出 String b="1113.141592653"; //方法1 BigDecimal bd1=new BigDecimal(b); DecimalFormat formatter2=new DecimalFormat("#.000000"); System.out.println(formatter2.format(bd1.doubleValue())); //方法2, BigDecimal中的setScale方法的第一个参数就 //是我们要指定的精度位数,这里我设为6位小数,但记住,如果 //舍入后的结果后面几位小数是0,则会被省略,就是说0没被输出,详见后面的测试 BigDecimal bd2=new BigDecimal(b); System.out.println(bd2.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); //测试 System.out.println(); System.out.println("以下为测试:"); BigDecimal b0=new BigDecimal("1.00000000"); System.out.println(b0.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b1=new BigDecimal("1.00000010"); System.out.println(b1.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b2=new BigDecimal("1.00000020"); System.out.println(b2.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b3=new BigDecimal("1.00000030"); System.out.println(b3.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b4=new BigDecimal("1.00000040"); System.out.println(b4.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b5=new BigDecimal("1.00000050"); System.out.println(b5.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b6=new BigDecimal("1.00000060"); System.out.println(b6.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b7=new BigDecimal("1.00000070"); System.out.println(b7.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b8=new BigDecimal("1.00000080"); System.out.println(b8.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b9=new BigDecimal("1.00000090"); System.out.println(b9.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); /*输出结果如下: 1113.141593 1113.141593 1113.141593 以下为测试: 1.0 1.0 1.0 1.0 1.0 1.000001 1.000001 1.000001 1.000001 1.000001 */ } } -->高精度的问题确实是一个大问题,又可惜今年了. PS:写完之后才发现Java还有这样的方法来控制输出精度 System.out.printf("%.6f/n",0.1); 输出结果为:0.100000