MySQL定点数据类型(精确值)-DECIMAL

1 DECIMAL介绍

在MySQL中,DECIMAL和NUMERIC是定点类型数据,以二进制形式存储,因此存储的是准确的数字。
在创建MySQL的DECIMAL列的时候,可以指定进度和标度:DECIMAL(M,D)。M为精度(precision),表示该值的总长度;D为标度(scale),表示小数点后面的长度。
例如:
DECIMAL(7,4)可存储的数据范围为-999.9999~999.9999。MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001。
在标准SQL中,语法DECIMAL为默认值,等价于DECIMAL(10,0)。DECIMAL(M)等价于DECIMAL(M,0)。
FLOAT和DOUBLE在不指定精度时,默认会按照实际的精度来显示,而DECIMAL在不指定精度时,默认整数为10,小数为0,即DECIMAL(10,0)。

DECIMAL的数字总长度M最大为65,但是实际能表示的数值范围受精度和标度的限制。当DECIMAL(M,D)列存储的数值的小数位数超过D,则四舍五入到D位。当DECIMAL(M,D)列存储的数值大于该列能表示的范围,则存储为DECIMAL(M,D)能表示的最大值;当DECIMAL(M,D)列存储的数值小于该列能表示的范围,则存储为DECIMAL(M,D)能表示的最小值。

示例:
定义数据库列为DECIMAL(5,2)
插入数据:

插入值 结果
1.2345 小数点后最多2位,所以保存可以,自动四舍五入数据截断,但会报waning
12.34 OK
1234.5 因为小数部分未满2位,要补0.所以保存应该1234.50。所以整个位数超出了5,保存报错。
1.2 小数未满部分补0。按照1.20保存。

注意
在mysql中float、double(或real)是浮点数,decimal(或numberic)是定点数。
浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围;它的缺点是会引起精度问题。
在今后关于浮点数和定点数的应用中,大家要记住以下几点:
1、浮点数存在误差问题;
2、对货币等对精度敏感的数据,应该用定点数表示或存储;
3、编程中,如果用到浮点数,要特别注意误差问题,并尽量避免做浮点数比较;
4、要注意浮点数中一些特殊值的处理。

2 浮点数和定点数的比较

默认状态比较

浮点数如果不写经度和标度,会按照实际精度值保存,如果有精度和标度,则会自动将四舍五入后的结果插入,系统不会报错;定点数如果不写精度和标度,则按照默认值decimal(10,0) 来操作,如果数据超过了精度和标度值,系统会报错。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL支持多种类型,大...
    garvin阅读 3,693评论 0 1
  • MySQL数据库对象与应用 2.1-MySQL数据类型 库建立好之后基本不动,和我们接触最频繁的是表. 建表就是声...
    极客圈阅读 6,514评论 0 8
  • 本文基于MySQL5.6版本进行描述从大的方面来讲,MySQL的数据类型分为4种 数值类型 日期和时间 字符串类型...
    黑哥儿666阅读 4,112评论 0 0
  • (在欧洲城市的大街上,常常可以看到年轻的女士和小姐手里夹着香烟,旁若无人,年轻人以此为时尚。如果这个现象不难理解的...
    潘洪革阅读 5,454评论 0 2
  • 早上做了个很长的梦,一般记不住梦的我,愣是把有你的几个片段给记住了,你小脸擦的白白的,戴着个帽子,围着我的红围巾看...
    滚你丫阅读 1,621评论 0 0

友情链接更多精彩内容