【mysql 】定点类型
⽂章⽬录
定点数类型
1. 类型介绍MySQL中的定点数类型只有 DECIMAL ⼀种类型。
数据类型
字节数含义DECIMAL(M,D),DEC,NUMERIC M+2字节有效范围由M和D决定使⽤ DECIMAL(M,D) 的⽅式表⽰⾼精度⼩数。其中,M 被称为精度,D 被称为标度。0<=M<=65,0<=D<=30,D<M 。例如,定义DECIMAL (5,2)的类型,表⽰该列取值范围是-999.99~999.99。
DECIMAL(M,D)的最⼤取值范围与DOUBLE类型⼀样,但是有效的数据范围是由M和D决定的。DECIMAL 的存储空间并不是固定的,由精度值M决定,总共占⽤的存储空间为M+2个字节。也就是说,在⼀些对精度要求不⾼的场景下,⽐起占⽤同样字节长度的定点数,浮点数表达的数值范围可以更⼤⼀些。定点数在MySQL内部是以字符串的形式进⾏存储,这就决定了它⼀定是精准的。
当DECIMAL
类型不指定精度和标度时,其默认为DECIMAL(10,0),表⽰有10个整数位,0个⼩数位,其范围:-
9999999999~9999999999。当数据的精度超出了定点数类型的精度范围时,则MySQL同样会进⾏四舍五⼊处理。
2. 浮点数 vs 定点数
浮点数相对于定点数的优点是在长度⼀定的情况下,浮点类型取值范围⼤,但是不精准,适⽤于需要取值范围⼤,⼜可以容忍微⼩误差的科学计算场景(⽐如计算化学、分⼦建模、流体动⼒学等)
定点数类型取值范围相对⼩,但是精准,没有误差,适合于对精度要求极⾼的场景 (⽐如涉及⾦额计算的场景)
举例说明
存在 四舍五⼊CREATE TABLE test_decimal1(f1 DECIMAL ,f2 DECIMAL (5,2));DESC test_decimal1;1
2
3
4
5
6INSERT INTO test_decimal1(f1,f2)VALUES (123.123,123.456);
1
2springmvc的五个注解
f1(10,0) 表⽰⽆⼩数位,所以显⽰ 123超出范围,报错。因为f2 DECIMAL(5,2)
,得知整数位是3,⼩数位是2,下⾯的整数位超出后就会报错。
span位置
mysql语句分类注意:整数位超出范围会直接报错,⼩数位超出范围会四舍五⼊案例演⽰
浮点类型是不精确的#Out of range value for column 'f2' at row 1INSERT INTO test_decimal1(f2)VALUES (1234.34);
1
23INSERT INTO test_decimal1(f2)VALUES (999.99);
1
2CREATE TABLE test_double2(f1 DOUBLE );INSERT INTO test_double2VALUES (0.47),(0.44),(0.19);SELECT SUM (f1)FROM test_double2;
1
2
3
4
5
6
7
8
9
按理说:0.47+0.44+0.19 = 1.1把test_double2表中字段“f1”的数据类型修改为
DECIMAL(5,2)
然后,再⼀次运⾏求和语句:SELECT SUM (f1) = 1.1,1.1 = 1.1FROM test_double2;
12ALTER TABLE test_double2MODIFY f1 DECIMAL (5,2);DESC test_double2;
1
2
3
4mysql > SELECT SUM (f1) -> FROM test_double2;+---------+| SUM (f1) |+---------+| 1.10 |+---------+1 row in set (0.00 sec )
1
2路星辞段嘉衍塞冰块write
3
4
5
6
7
8mysql > SELECT SUM (f1) = 1.1 -> FROM test_double2;+---------------+| SUM (f1) = 1.1 |+---------------+| 1 |+---------------+1 row in set (0.00 sec )
1
2
3
4
5
6
7
8mysql服务器的配置文件的文件名是
结果为 1 ,说明是 正确的
3. 开发中经验由于 DECIMAL 数据类型的精准性,在项⽬中,除了极少数(⽐如商品编号)⽤到整数类型外,其他的数值都⽤的是 DECIMAL ,原因就是这个项⽬所处的零售⾏业,要求精准。SELECT SUM (f1) = 1.1,1.1 = 1.1FROM test_double2;
处理意见null是什么意思1
2
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论