decimal 默认精度mysql_mysql中decimal的使用

float,double,decimal区别

创建表test_float_double_decimal

CREATE TABLE `test_float_double_decimal` (

`id` int(11) NOT NULL COMMENT 'id',

`float7.4` float(7,4) NOT NULL,

`float255.30` float(255,30) NOT NULL,

`double15.4` double(15,4) NOT NULL,

`double255.30` double(255,30) NOT NULL,

`decimal10.4` decimal(10,4) NOT NULL,

`decimal65.30` decimal(65,30) NOT NULL,

`float_default` float NOT NULL,

`double_default` double NOT NULL,

`decimal_default` decimal(10,0) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `test_float_double_decimal`(`float7.4`, `float255.30`, `double15.4`, `double255.30`, `decimal10.4`, `decimal65.30`, `float_default`, `double_default`, `decimal_default`) VALUES (789.123456789,123456789.123456789,123456789.123456789,123456789.123456789,789.123456789,123456789.123456789,123456789.123456789,123456789.123456789,123456789.123456789);

INSERT INTO `test_float_double_decimal`(`float7.4`, `float255.30`, `double15.4`, `double255.30`, `decimal10.4`, `decimal65.30`, `float_default`, `double_default`, `decimal_default`) VALUES (789.123456789,12345678987654321.12345678987654321,12345678987.12345678987654321,12345678987654321.12345678987654321,789.12345678987654321,12345678987654321.12345678987654321,12345678987654321.12345678987654321,12345678987654321.12345678987654321,1234567898.12345678987654321);

7b7f2c25db98963ae7a71f1bfef70645.png

3953ae29cfad7276fe668267fd912eca.png

第一条数据插入后,float都跑偏了,double还算正常(最后位值四舍五入),decimal正常(最后位值四舍五入)。

第二条数据插入后发现,float跑偏最严重,double也开始有些跑偏。decimal最正常。

decimal详情

decimal(a,b)

参数说明

a指定指定小数点左边和右边可以存储的十进制数字的最大个数,默认是10,最大精度65。

b指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 a之间的值。默认小数位数是 0,最大值为30。

备注

DECIMAL数据类型用于要求非常高的精确度的计算中,这些类型允许指定数值的精确度和计数方法作为选择参数。精确度在这里是指为这个值保存的有效数字的总个数,而计数方法表示小数点后数字的个数。例如,语句DECIMAL (5,2)规定了存储的值将不会超过5位数字,开且小数点后面有2位数字。

总结:像坐标,钱这样的数据,对于精度要求高的,可以采用decimal来进行存储。

decimal(10,2) 表示钱,decimal(10,6)可以表示坐标。

项目中的数据表中存储坐标,使用了float,结果如下。

0d4aec03e3910f2f60487503512e9efd.png

数据都丢失了,本来后面是6位小数的,经过上面的实验总结,适合改为使用decimal来进行存储,double也还可以,不过需要设置好位数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值