zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    python 字典转对象实现
    漏洞复现的整理
    mlx90614红外传感器
    【小程序码】登录的技术实现案例
    Spring mvc Aop
    MSHFLEXGRID常用的属性,方法事件
    InsertAuditEntryNew
    Froggy 的 CSP-2021 S1 游记
    JOI Open 偷学记录
    生产订单工序新增、修改、删除——CO_SE_PRODORD_OPR_CREATE、CO_SE_PRODORD_OPR_CHANGE、CO_SE_PRODORD_OPR_DELETE
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/4804877.html
Copyright © 2011-2022 走看看