我有以下表结构和数据:
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.99
,9.99
,反之亦然
任何人都可以解释一下吗?
提前谢谢。
答案 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的地方