Mysql中设置小数点用什么数据类型 decimal

Mysql中设置小数点用什么数据类型 decimal,第1张

mysql中小数点用decimal(x,y)进行存储,

示例如下,

1、创建测试表,create table test_decimal(id int, fee_value decimal(20,3))

2、插入测试数据,

insert into test_decimal values(1,12.2)

insert into test_decimal values(3,33.789)

insert into test_decimal values(6666,555.332)

3、查询表中所有记录,select * from test_decimal t

4、小数转整,可以用floor或round函数,select t.*, floor(fee_value) as fee1, round(fee_value) fee2 from test_decimal t

可能做程序的人都知道,float类型是可以存浮点数(即小数类型),但是float有个坏处,当你给定的数据是整数的时候,那么它就以整数给你处理。这样我们在存取货币值的时候自然遇到问题,我的default值为:0.00而实际存储是0,同样我存取货币为12.00,实际存储是12.

幸好mysql提供了两个数据类型:numeric和decimal,这两种数据类型可以轻松解决上面的问题:

NUMERIC 和 DECIMAL 类型被 MySQL 以同样的类型实现,这在 SQL92 标准中是允许的。他们用于保存对准确精度有重要要求的值,例如与金钱有关的数据。当以它们中的之一声明一个列时,精度和数值范围可以(通常是)被指定;例 如:

salary DECIMAL(5,2)

在这个例子中,5 (精度(precision)) 代表重要的十进制数字的数目,2 (数据范围(scale)) 代表在小数点后的数字位数。在这种情况下,因此,salary 列可以存储的值范围是从 -99.99 到 99.99。(实际上 MySQL 在这个列中可以存储的数值可以一直到 999.99,因为它没有存储正数的符号)。

译者注:

M 与D 对DECIMAL(M, D) 取值范围的影响

类型说明 取值范围(MySQL <3.23) 取值范围(MySQL >= 3.23)

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都出现后面很长的一串浮点小数点。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/8545569.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-17
下一篇2023-04-17

发表评论

登录后才能评论

评论列表(0条)

    保存