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
  • 相关阅读:
    padStart()方法,padEnd()方法
    模板字符串
    Flask ==》 信号 and flash-session
    单例模式
    Git == > 版本控制
    Flask ==> 文件配置
    setitem和getitem和delitem
    Flask ==> 简单用户登录
    Flask
    Django ==> Model基础
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/4804877.html
Copyright © 2011-2022 走看看