您的位置:首页 > 编程语言 > Java开发

Java的数值精度的输出控制(包含BigDecimal)

2009-03-29 22:51 405 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: