zoukankan      html  css  js  c++  java
  • MySQL中Decimal类型和Float Double等区别

    MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型。
    其区别在于,float,double等非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形式保存数值。
    float,double类型是可以存浮点数(即小数类型),但是float有个坏处,当你给定的数据是整数的时候,那么它就以整数给你处理。这样我们在存取货币值的时候自然遇到问题,我的default值为:0.00而实际存储是0,同样我存取货币为12.00,实际存储是12。
    幸好mysql提供了两个数据类型:decimal,这种数据类型可以轻松解决上面的问题:decimal类型被 MySQL 以同样的类型实现,这在 SQL92 标准中是允许的。他们用于保存对准确精度有重要要求的值,例如与金钱有关的数据。

    数据定义
    float(M,S) M为全长,S为小数点后长度。对于不精准的例子,网络上很多,Copy如下:
    mysql> create table t1(c1 float(10,2), c3decimal(10,2)); 
    Query OK, 0 rows affected (0.02 sec)
    mysql> insert into t1 values(9876543.21, 9876543.12);                   
    Query OK, 1 row affected (0.00 sec)
    mysql> select * from t1;                        
    +----------------+-----------------+
    | c1                | c3                   |
    +----------------+-----------------+
    | 9876543.00 | 9876543.12 | 
    +----------------+------------------+
    2 rows in set (0.00 sec)

    再举例: DECIMAL(5,2)

    mysql> create table t1(id1 float(5,2) default null,id2 double(5,2) default null,
    id3 decimal(5,2) default null );

    mysql> insert into t1 values(1.2345,1.2345,1.2345);
    Query OK, 1 row affected, 1 warning (0.04 sec)

    mysql> show warnings;
    +-------+------+------------------------------------------+
    | Level | Code | Message |
    +-------+------+------------------------------------------+
    | Note | 1265 | Data truncated for column 'id3' at row 1 |
    +-------+------+------------------------------------------+
    1 row in set (0.00 sec)

     
    1.2345 --- 小数点后最多2位,所以保存可以,自动四舍五入数据截断,但会报waning
    12.34 --- OK
    1234.5 --- 因为小数部分未满2位,要补0.所以保存应该1234.50。所以整个位数超出了5,保存报错。
    1.2 --- 小数未满部分补0。按照1.20保存。
     
    默认状态比较
    浮点数如果不写经度和标度,会按照实际精度值保存,如果有精度和标度,则会自动将四舍五入后的结果插入,系统不会报错;定点数如果不写精度和标度,则按照默认值decimal(10,0) 来操作,如果数据超过了精度和标度值,系统会报错。
     
  • 相关阅读:
    高通、猎户机型Android典型bootloader分析
    Ubuntu 14.04 中安装 VMware10 Tools工具
    Linux内核中的GPIO系统之(3):pin controller driver代码分析
    linux内核中的GPIO系统之(2):pin control subsystem
    linux内核中的GPIO系统之(1):软件框架
    WINCE6.0组件选择说明
    看看,这就是微软的“万物互联”系统 window10 IOT
    高通平台 lcd driver 调试小结
    STM8S定时器工作
    开关笔记
  • 原文地址:https://www.cnblogs.com/xujishou/p/6307299.html
Copyright © 2011-2022 走看看