android double 取精度问题

 由于double默认小数点到15位(未验证),为了取精度弄了一天...发现有下面几种方法

double   f   =   1107781.3985;  
BigDecimal   b   =   new   BigDecimal(f);  
double   f1   =   b.setScale(4,   BigDecimal.ROUND_HALF_UP).doubleValue();  
保留两位小数  
---------------------------------------------------------------  

java.text.DecimalFormat   df   =new   java.text.DecimalFormat("#.00");  
df.format(float   param);

 还有 round()方法:原文地址:http://blog.sina.com.cn/s/blog_4b06743c0100lst3.html

 

ublic class MathTest {   
    public static void main(String[] args) {   
        System.out.println("小数点后第一位=5");   
        System.out.println("正数:Math.round(11.5)=" + Math.round(11.5));   
        System.out.println("负数:Math.round(-11.5)=" + Math.round(-11.5));   
        System.out.println();   
  
        System.out.println("小数点后第一位<5");   
        System.out.println("正数:Math.round(11.46)=" + Math.round(11.46));   
        System.out.println("负数:Math.round(-11.46)=" + Math.round(-11.46));   
        System.out.println();   
  
        System.out.println("小数点后第一位>5");   
        System.out.println("正数:Math.round(11.68)=" + Math.round(11.68));   
        System.out.println("负数:Math.round(-11.68)=" + Math.round(-11.68));   
      
}  

运行结果:

1、小数点后第一位=5
2、正数:Math.round(11.5)=12
3、负数:Math.round(-11.5)=-11
4、
5、小数点后第一位<5
6、正数:Math.round(11.46)=11
7、负数:Math.round(-11.46)=-11
8、
9、小数点后第一位>5
10、正数:Math.round(11.68)=12
11、负数:Math.round(-11.68)=-12

根据上面例子的运行结果,我们还可以按照如下方式总结,或许更加容易记忆:

1、参数的小数点后第一位<5,运算结果为参数整数部分。
2、参数的小数点后第一位>5,运算结果为参数整数部分绝对值+1,符号(即正负)不变。
3、参数的小数点后第一位=5,正数运算结果为整数部分+1,负数运算结果为整数部分。

 

 

 

终结:大于五全部加,等于五正数加,小于五全不加。

 

posted on 2012-03-06 20:31  后时x  阅读(3653)  评论(0编辑  收藏  举报