原帖由 oraclemch 于 2010-11-16 10:58 发表
MySQL permits a nonstandard syntax: FLOAT(M,D) or REAL(M,D) or DOUBLE PRECISION(M,D). Here, “(M,D)” means than values can be stored with up to M digits in total, of which D digits may be after the decimal point. For example, a column defined as FLOAT(7,4) will look like -999.9999 when displayed. MySQL performs rounding when storing values, so if you insert 999.00009 into a FLOAT(7,4) column, the approximate result is 999.0001.
兄弟,你自己看看,把你的建表sql与insert sql贴出来,再讨论吧,你给的信息太少了一点。
MySQL的英文手册我看了的
建表
CREATE TABLE `test_data` (
`tid` int(11) NOT NULL AUTO_INCREMENT,
`test_id` double(30,18) unsigned DEFAULT NULL,
PRIMARY KEY (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
实验1:
insert into test_data(test_id) values(0.123456789123456789);
在第三方软件中看是不一样的
MySQL-Front中显示为0.123456789123456800
SQLyog中显示为
0.123456789123456784
究竟哪个是准确的,是不是MySQL-Front中显示的是对的,16位有效数字?怎么结果还不一样,晕死
实验2:
insert into test_data(test_id) values(263.123456789123456789);
在第三方软件中看是不一样的
MySQL-Front中显示为263.123456789123456000
SQLyog中显示为
263.123456789123451927
实验3:
将test_id类型改为 double unsigned default null
INSERT INTO test_data(test_id) VALUES(0.123456789123456789);
MySQL-Front中显示为0.1234567891234569920000000000000
SQLyog中显示为
0.123456789123457
实验4:
test_id 类型仍为 double unsigned default null
INSERT INTO test_data(test_id) VALUES(263.123456789123456789);
MySQL-Front中显示为263.1234567891230080000000000000000
SQLyog中显示为
263.123456789123
以上实验,我感觉怎么Double类型的有效数字不止16位?而且怎么显示的都不一样呢
在不同的插入情况下
|