想一个问题:
1/3+1/3+1/3=1.0
0.3+0.3+0.3 =0.9
想一想在小数的世界里要什么表示1/3呢!它的办法就是取一个与1/3十分接近的小数来代替;如上面例子中的0.3来代替1/3;这样问题就来了存进去的是3个1/3取出时就只有0.9。
也许你感觉1/3这个数太特别了它本来就有无数位,近似值代替也是没有办法的。可是你知道吗?在二进制的世界里0.1这样的数也不是可以精确的存储的(float),如果不明白这点就去看IEEE 754 标准。下面给出一个0.1的例子。
create table t(x float); insert into t(x) values(0.1);
create table t2(x decimal); insert into t2(0.1);
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
decimal 是以字符方式存储的,它的精确度不会丢失。
时间: 2024-10-17 16:05:42