在mysql中转换为十进制

时间:2014-03-14 20:36:02

标签: mysql sql int type-conversion decimal

我有以下表结构和数据:

create table sample
(
    id INT(10)
);

INSERT INTO sample
values
(23398),
(98743),
(54734);

现在我想了解mysql中的CAST函数。请考虑以下查询:

select 
cast((id/3) as decimal(2,2)) as cast1,
cast((id/3) as decimal(3,2)) as cast2,
cast((id/3) as decimal(4,2)) as cast3,
cast((id/3) as decimal(5,2)) as cast4,
cast((id/3) as decimal(6,2)) as cast5,
cast((id/3) as decimal(7,2)) as cast6,
id/3 as actualId
from sample;

请在SQL Fiddle查看此查询的输出 我想知道为什么这个查询会给0.999.99,反之亦然 任何人都可以解释一下吗? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

decimal是一个带有2个参数的类型

十进制(大小,地点):

大小决定了数字中有多少位数。

places确定这些数字中有多少位于小数点右侧。

十进制(2,2) - .00 - 两位都在十进制右边

当铸造(23398/3)= 7799.33333333到declimal(2,2)时,它会在最接近所需数量的指定空间量内产生小数,即0.99

十进制(3,2) - 0.00 - 3位数2位于小数点右侧

当铸造(23398/3)= 7799.33333333为declimal(3,2)时,它会在最接近所需数量的指定空间量内产生小数,即9.99

如果所有原始数字都为负数,则会产生-0.99和-9.99,因为它们是在分配的空间内与所需数字最接近的数字

事实上,如果你把max加倍并试图将它转换成一个int,那么java会做类似的事情你将给出max int,这是没有接近max double的地方