MySQL float 型別的精度

2021-04-28 00:45:00 字數 4208 閱讀 1937

總結:

要得到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

mysql float精度與範圍總結

float型別用於表示近似數值資料型別。sql標準 允許在關鍵字float後面的括號內選擇用位指定精度 但不能為指數範圍 mysql還支援可選的只用於確定儲存大小的精度規定。0到23的精度對應 float列的4位元組單精度。24到53的精度對應double列的8位元組雙精度。單精度浮點數用4位元組 ...

mysql float精度與範圍總結

float型別用於表示近似數值資料型別。sql標準 允許在關鍵字float後面的括號內選擇用位指定精度 但不能為指數範圍 mysql還支援可選的只用於確定儲存大小的精度規定。0到23的精度對應 float列的4位元組單精度。24到53的精度對應double列的8位元組雙精度。單精度浮點數用4位元組 ...

關於float的精度型別

1 主要記錄一下為什麼float的精度型別為6 7位 首先,應該明確float資料型別,佔4個位元組,共4 8 32位,其中 ieee754標準規定如下 32位當中,1位為符號位 8位指數字 23位為數值位。故float型別的數值是由後邊的23位決定。23位指的是2進製數可以表示2 23取值範圍以內...