Decimal、 Float、 Double 使用

一.Java

1.float型定义的数据末尾必须 有"f "或"F",为了和double区别。例float x=123.456f,  y=2e20f;

 

    public static void main(String[] args) {
        System.out.println(0.08f + 0.01f);
    }

输出:

0.089999996

 

2.精确计算中我们要用java.math.BigDecimal

class DecimalUtil{
    private static final int DEF_DIV_SCALE=10;
    public static double add(double d1,double d2){
        BigDecimal b1=new BigDecimal(Double.toString(d1));
        BigDecimal b2=new BigDecimal(Double.toString(d2));
        return b1.add(b2).doubleValue();
        
    }
    
    public static double sub(double d1,double d2){
        BigDecimal b1=new BigDecimal(Double.toString(d1));
        BigDecimal b2=new BigDecimal(Double.toString(d2));
        return b1.subtract(b2).doubleValue();
        
    }
    
    public static double mul(double d1,double d2){
        BigDecimal b1=new BigDecimal(Double.toString(d1));
        BigDecimal b2=new BigDecimal(Double.toString(d2));
        return b1.multiply(b2).doubleValue();
        
    }
    
    public static double div(double d1,double d2){

        return div(d1,d2,DEF_DIV_SCALE);
        
    }
    
    public static double div(double d1,double d2,int scale){
        if(scale<0){
            throw new IllegalArgumentException("The scale must be a positive integer or zero");
        }
        BigDecimal b1=new BigDecimal(Double.toString(d1));
        BigDecimal b2=new BigDecimal(Double.toString(d2));
        return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
        
    }
    
}

 

二。Mysql

1.float

create table t_float(c1 float(10,2), c3 decimal(10,2));
insert into t_float values(9876543.21, 9876543.12);
select * from t_float;

输出:

 9876543.00 | 9876543.12 

 

2.decimal

create table t_decimal(d1 decimal(5,3));
insert into t_decimal(d1) values (1.2345),(12.345),(123.45),(1.2);
select * from t_decimal;

输出:

+--------+
| num |
+--------+
| 1.235 | 
| 12.345 |
| 99.999 | 
| 1.200 | 
+--------+

分析:

1.2345 -- 小数点后最多3位,所以保存可以,自动四舍五入数据截断。
12.345 -- OK
123.45 -- 因为小数部分未满3位,要补0。所以保存应该123.450。但整个位数超出了5,因此保存不了
1.2 -- 小数未满部分补0

 

posted @ 2015-09-13 14:01  等风来。。  Views(414)  Comments(0Edit  收藏  举报
------------------------------------------------------------------------------------------------------------ --------------- 欢迎联系 x.guan.ling@gmail.com--------------- ------------------------------------------------------------------------------------------------------------