要得到1位或2位精確小數的話,整數不能高于 32767
即:f<32767.99
因為 2E15=32768
所以最多只能正確處理0~32767的整數,
要得到3位 精確 小數的話,整數不能高于16383
即:f< 16383 .999
因為 2E14=16384
要得到4位 精確 小數,整數不能高于2047
即:f< 2047 .9999
而 2E11=2048
要得到5位 精確 小數,整數不能高于127
即:f< 127 .99999
而 2E7=128
要得到6位 精確 小數,整數不能高于15
即:f<15 .999999
而 2E4=16
要得到7位 精確 小數,整數不能高于0
即:f< 0 .9999999
而 2E0=0
要得到8位以上的 精確 小數,是不可能的
即:f不存在
筆者得到了一些數據,不過得不到它變化的規律,還請高人指點
筆者得出結論的過程:
我建了這個表:
create table q(
money float(15,3)
);
然后插入這個數據:
insert into q values(1234567.234);
再select一下讀出來后發現,它顯示的是:
1234567.250
然后插入這個數據:
insert into q values(12345672.34);
再select一下讀出來后發現,它顯示的是:
12345672.000
也就是說,有10數位與以上的話就會出現不準確的情況。
如果是這樣的話:
create table q(
money float(10,3)
);
insert into q values(1234567.3);
得到的是:
1234567.250
insert into q values(1234567);
得到的是:
1234567.000
insert into q values(123456.7);
得到的是:
123456.703
insert into q values(12345.67);
得到的是:
12345.670
insert into q values(32768.990);
得到:32768.988
insert into q values(32767.990);
得到:32767.990
經過很多次的試驗
要得到2位小數則 整數部分 最多不能超過32767。
表改為:
create table q(
money float(30,10)
);
對純小數部分測試:
insert into q values(0.999);
得到:0.9990000129
insert into q values(0.9999);
得到 :0.9998999834
insert into q values(0.99999);
得到:0.9999899864
insert into q values(327.99);
得到 :327.9899902344
insert into q values(327.999);
得到:327.9989929199
表改為:
create table q(
money float(7,2)
);
insert into q values(327.99);
得到:327.99
insert into q values(327.9999);
得到:328.00
insert into q values(32767.9999);
得到:32768.00
insert into q values(32767.99);
得到: 32767.99
insert into q values(99999.99);
得到: 99999.99
表改為:
create table q(
money float(8,2)
);
insert into q values(999999.99);
得到 :1000000.00
insert into q values(999998.99);
得到:999999.00
insert into q values(130999.99);
得到:130999.99
表改為:
create table q(
money float(9,3)
);
insert into q values(32768.990);
得到: 32768.988
insert into q values(32767.990);
得到:32767.990
insert into q values(16383.999);
得到:16383.999
要得到3位小數的話,整數不能高于16383
insert into q values(32767.90);
得到:32767.900
insert into q values(32768.90);
得到:32768.898
要得到1位小數的話,整數不能高于32767