Mysql 存小數的問題


最近做一個報表,有個字段保存money,涉及到小數,沒有多想就將數據庫字段設置成了float,等查詢出來,真正的值后面加了一坨隨機數字,太嘔吐了,查了點資料,將該字段格式改成了decimal(10,1),就ok了。

例如,語句FLOAT (5,2)規定顯示的值不會超過5位數字,小數點后面帶有2位數字。

對於小數點后面的數字個數超過了允許的數目的值,系統會自動將它四舍五入為最接近它的值,然后插入它。

mysql> create table data(price float(5,2));

Query OK, 0 rows affected

 

mysql> insert into data values (13.6),(876.90),(-5.2),(-123.456);

Query OK, 4 rows affected

Records: 4 Duplicates: 0 Warnings: 0

 

mysql> select * from data;

+---------+

| price |

+---------+

| 13.6 |

| 876.9 |

| -5.2 |

| -123.46 |

+---------+

4 rows in set

 

DECIMAL 數據類型用於要求非常高的精確度的計算中,這些類型允許指定數值的精確度和計數方法作為選擇參數。精確度在這里是指為這個值保存的有效數字的總個數,而計 數方法表示小數點后數字的個數。例如,語句DECIMAL (5,2)規定了存儲的值將不會超過5位數字,開且小數點后面有2位數字。

MySQL在內部把DECIMAL數據類型存儲為字符串,更精確地保留它們的值。

 

mysql> create table data_8(bad decimal(6,3));

Query OK, 0 rows affected

 

mysql> insert into data_8 values (1);

Query OK, 1 row affected

 

mysql> select * from data_8;

+-----+

| bad |

+-----+

| 1.000   |

+-----+

1 row in set

 

忽略DECIMAL數據類型的精確度和計數方法修飾符將會使MySQL把所有標識為這個類型的字段的精確度默認為10,計算方法默認為0

mysql> create table data_9 (test decimal

);

Query OK, 0 rows affected

mysql> desc data_9;

+-------+---------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------------+------+-----+---------+-------+

| test | decimal(10,0) | YES | | NULL | |

+-------+---------------+------+-----+---------+-------+

1 row in set


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM