• mysql中float类型使用总结


    对于单精度浮点数Float:  当数据范围在±131072(65536×2)以内的时候,float数据精度是正确的,但是超出这个范围的数据就不稳定,没有发现有相关的参数设置建议:将float改成double或者decimal,两者的差别是double是浮点计算decimal是定点计算,会得到更精确的数据。

    下面使用分析,

    首先创建测试表

    CREATE TABLE `customer` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(45) DEFAULT NULL,
      `age` int(11) DEFAULT NULL,
      `jinqian` float(5,2) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=11111112 DEFAULT CHARSET=utf8;

    float(m,d)

    m表示的是最大长度,d表示的显示的小数位数。

    例如上面的sql里:float(5,2) 表示:这个浮点数最大长度为5,也就是五位,然后小数部分为2位,至于存储范围,取决于你是否定义了无符号。

    无符号的话,最小是0.0 最大能存储到99999.9,如果有符号的话,范围是:-99999.9至99999.9。

    默认大小为24位数字,精度大约7位数字(经测试为6位),当设置M大小大于24时,自动转换为DOUBLE类型;同时设置M和D时不进行自动转换。

    小数位超过设定值,按四舍五入保存

    INSERT INTO customer (id,name,age,jinqian) VALUES (111111111,'uu',15,90.012);
    INSERT INTO customer (id,name,age,jinqian) VALUES (1111111111,'uu',15,90.018);

    上面两个分别被保存为

    小数位如果都是0,则不保存小数位

    INSERT INTO customer (id,name,age,jinqian) VALUES (1,'uu',15,90.0);
    INSERT INTO customer (id,name,age,jinqian) VALUES (11,'uu',15,90.00);

    上面两个分别被保存为

    总结

    从上面的分析,我们可以得出以下结论:

    1、浮点数存在误差问题;
    2、对货币等对精度敏感的数据,应该用定点数表示或存储;
    3、编程中,如果用到浮点数,要特别注意误差问题,并尽量避免做浮点数比较;
    4、要注意浮点数中一些特殊值的处理

  • 相关阅读:
    【WebSocket】Qt客户端
    【WebSocket】入门教程(JS)
    【C++ 压缩&解压缩 开源库】ZIP入门使用总结
    【C++ JSON 开源库】nlohmann入门使用总结
    OSS C++ SDK使用总结
    解决Element中table文字过多换行问题
    Xmind安装报错
    Object.assign()
    mousedown、mouseup、click
    el-table 动态控制表格高度
  • 原文地址:https://www.cnblogs.com/shamo89/p/8202837.html
Copyright © 2020-2023  润新知