zoukankan      html  css  js  c++  java
  • MySQL类型float double decimal的区别

    float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,float和double都是浮点型,而decimal是定点型;

    MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(7,4)的 可显示为-999.9999,MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001。

    FLOAT和DOUBLE在不指 定精度时,默认会按照实际的精度来显示,而DECIMAL在不指定精度时,默认整数为10,小数为0。

    1、CREATE TABLE test(f FLOAT(5,2) DEFAULT NULL,d DOUBLE(5,2) DEFAULT NULL,de DECIMAL(5,2) DEFAULT NULL);

    2、DESC test;

    3、INSERT INTO test(f,d,de) VALUES(1.23,1.23,1.23);

    数据插入都正确

    4、INSERT INTO test(f,d,de) VALUES(1.234,1.234,1.23);

    数据插入都正确,但是f和d由于标度的限制,舍去了最后一位。

    5、INSERT INTO test(f,d,de) VALUES(1.234,1.234,1.234);

    数据也插入成功,但是有一个警告提示:

    1 queries executed, 1 success, 0 errors, 1 warnings

    Note Code : 1265
    Data truncated for column 'de' at row 1

    6、将id1,id2,id3的精度和标度都去掉

    ALTER TABLE test MODIFY f FLOAT;

    ALTER TABLE test MODIFY d DOUBLE;
    ALTER TABLE test MODIFY de DECIMAL;

    DELETE FROM test;
    DESC test;

    7、INSERT INTO test(f,d,de) VALUES(1.234,1.234,1.234);

    1 queries executed, 1 success, 0 errors, 1 warnings

    Note Code : 1265
    Data truncated for column 'de' at row 1

    f和d的数据正确插入,而de被截断。

    浮点数如果不写精度和标度,则会按照实际显示,如果有精度和标度,则会将数据四舍五入后插入,系统不报错,定点数如果不设置精度和标度,刚按照默认的(10,0)进行操作,如果数据超过了精度和标度值,则会警告!

    同时,对数据求SUM()时会出现不同的结果,float和double求SUM都会出现很多小数点,而decimal求SUM得到的是精准数值:

    8、INSERT INTO test(f,d,de) VALUES(1.234,0.01,1.23);

    数据都插入成功

    9、SELECT SUM(f),SUM(d),SUM(de) FROM test;

    理论上SUM(f)=3.698,SUM(d)=2.474,SUM(de)=3.46,但f,d都出现后面很长的一串浮点小数点。

  • 相关阅读:
    1094. Car Pooling
    121. Best Time to Buy and Sell Stock
    58. Length of Last Word
    510. Inorder Successor in BST II
    198. House Robber
    57. Insert Interval
    15. 3Sum java solutions
    79. Word Search java solutions
    80. Remove Duplicates from Sorted Array II java solutions
    34. Search for a Range java solutions
  • 原文地址:https://www.cnblogs.com/jpfss/p/11194744.html
Copyright © 2011-2022 走看看