• 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
  • 相关阅读:
    Pyinstaller打包多个py文件
    Oracle 数据库基础教程之用户管理
    Navicat连接Oracle报错ORA-28547
    Oracle 激活用户及重置密码
    coding公钥配置教程
    关于联想笔记本小新自动关机解决方法
    PIP镜像像源
    Bugku——Web——web基础$_POST
    Bugku——Web——web基础$_GET
    Bugku——Web——计算器
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/4804877.html
Copyright © 2020-2023  润新知