Rumah > Artikel > pangkalan data > Apakah jenis yang digunakan mysql untuk perpuluhan?
Jenis yang tersedia untuk perpuluhan mysql: 1. Jenis FLOAT, yang boleh menyimpan nombor titik terapung ketepatan tunggal 2. Jenis DOUBLE, yang boleh menyimpan nombor titik terapung berketepatan ganda 3. Jenis PERPULUHAN, digunakan untuk menyimpan nilai yang tepat, seperti perakaunan data Mata Wang dalam sistem.
Persekitaran pengendalian tutorial ini: sistem windows7, versi mysql8, komputer Dell G3.
MySQL menggunakan nombor titik terapung dan nombor titik tetap untuk mewakili perpuluhan.
Terdapat dua jenis titik terapung, nombor titik terapung ketepatan tunggal (FLOAT) dan nombor titik terapung ketepatan dua (DOUBLE) hanya terdapat satu jenis titik tetap, iaitu PERPULUHAN.
Kedua-dua jenis titik terapung dan jenis titik tetap boleh diwakili oleh (M, D), di mana M dipanggil ketepatan, menunjukkan jumlah bilangan digit D dipanggil skala, menunjukkan bilangan digit perpuluhan .
Julat nilai jenis nombor titik terapung ialah M (1~255) dan D (1~30, dan tidak boleh lebih besar daripada M-2), yang masing-masing mewakili lebar paparan dan bilangan tempat perpuluhan. M dan D adalah pilihan dalam FLOAT dan DOUBLE, dan jenis FLOAT dan DOUBLE akan disimpan pada ketepatan maksimum yang disokong oleh perkakasan. Nilai D lalai untuk DECIMAL ialah 0 dan nilai M ialah 10.
Jadual berikut menyenaraikan jenis perpuluhan dan keperluan storan dalam MySQL.
Jenis PERPULUHAN berbeza dengan FLOAT dan DOUBLE. DOUBLE sebenarnya disimpan dalam bentuk rentetan Julat nilai maksimum yang mungkin bagi DECIMAL adalah sama dengan DOUBLE, tetapi julat nilai berkesan ditentukan oleh M dan D. Jika M diubah dan D ditetapkan, julat nilai akan menjadi lebih besar apabila M menjadi lebih besar.
Seperti yang anda boleh lihat daripada jadual di atas, ruang storan PERPULUHAN tidak tetap, tetapi ditentukan oleh nilai kejituan M, yang menduduki M 2 bait.
Julat nilai jenis FLOAT adalah seperti berikut:
Julat nilai yang ditandatangani: -3.402823466E 38~-1.175494351E-38 .
Julat nilai yang tidak ditandatangani: 0 dan -1.175494351E-38~-3.402823466E 38.
Julat nilai jenis DOUBLE adalah seperti berikut:
Julat nilai yang ditandatangani: -1.7976931348623157E 308~ - 2.2250738585072014E-308.
Julat nilai yang tidak ditandatangani: 0 dan -2.2250738585072014E-308~-1.7976931348623157E 308.
Nota: Sama ada ia jenis titik tetap atau titik terapung, jika ketepatan yang ditentukan pengguna melebihi julat ketepatan, ia akan dibundarkan untuk diproses .
FLOAT dan DOUBLE akan lalai kepada ketepatan sebenar apabila ketepatan tidak ditentukan secara lalai kepada (10, 0) jika ketepatan tidak dinyatakan.
Kelebihan nombor titik terapung berbanding nombor titik tetap ialah ia boleh mewakili julat yang lebih besar apabila panjangnya malar ialah ia boleh menyebabkan masalah ketepatan.
Jenis data DECIMAL
digunakan untuk menyimpan nilai tepat dalam pangkalan data. Kami sering menggunakan jenis data DECIMAL
untuk lajur yang mengekalkan ketepatan yang tepat, seperti data mata wang dalam sistem perakaunan.
Untuk mentakrifkan lajur dengan jenis data DECIMAL
, gunakan sintaks berikut:
column_name DECIMAL(P,D);
Dalam sintaks di atas:
P
ialah Mewakili ketepatan bilangan digit bererti. Julat P
ialah 1〜65
. D
mewakili bilangan digit selepas titik perpuluhan. Julat D
ialah 0
~30
. MySQL memerlukan D
kurang daripada atau sama dengan ()<code>P
.
DECIMAL(P,D)
menunjukkan bahawa lajur boleh menyimpan D
digit tempat perpuluhan. Julat sebenar lajur perpuluhan bergantung pada ketepatan dan skala. P
juga mempunyai atribut DECIMAL
dan UNSIGNED
. Jika atribut ZEROFILL
digunakan, lajur UNSIGNED
tidak akan menerima nilai negatif. DECIMAL UNSIGNED
digunakan, MySQL akan memasukkan nilai paparan ke dalam ZEROFILL
untuk memaparkan lebar yang ditentukan oleh definisi lajur. Selain itu, jika kita menggunakan 0
untuk lajur DECIMAL
, MySQL akan secara automatik menambah atribut ZERO FILL
pada lajur. UNSIGNED
jenis data untuk menentukan lajur yang dipanggil DECIMAL
. amount
amount DECIMAL(6,2);Dalam contoh ini, lajur
boleh menyimpan sehingga amount
digit dengan 6
tempat perpuluhan; oleh itu, lajur 2
berjulat dari amount
hingga -9999.99
. 9999.99
column_name DECIMAL(P);Ini bersamaan dengan:
column_name DECIMAL(P,0);Dalam kes ini, lajur tidak mengandungi bahagian perpuluhan atau titik perpuluhan . Selain itu, kita juga boleh menggunakan sintaks berikut.
column_name DECIMAL;Dalam kes ini, nilai lalai
ialah P
. 10
Storan PERPULUHAN MySQL
MySQL分别为整数和小数部分分配存储空间。 MySQL使用二进制格式存储DECIMAL
值。它将9
位数字包装成4
个字节。
对于每个部分,需要4
个字节来存储9
位数的每个倍数。剩余数字所需的存储如下表所示:
剩余数字 | 位 |
---|---|
0 | 0 |
1–2 | 1 |
3–4 | 2 |
5–6 | 3 |
7-9 | 4 |
例如,DECIMAL(19,9)
对于小数部分具有9
位数字,对于整数部分具有19
位= 10
位数字,小数部分需要4
个字节。 整数部分对于前9
位数字需要4
个字节,1
个剩余字节需要1
个字节。DECIMAL(19,9)
列总共需要9
个字节。
MySQL DECIMAL数据类型和货币数据
经常使用DECIMAL
数据类型的货币数据,如价格,工资,账户余额等。如果要设计一个处理货币数据的数据库,则可参考以下语法 -
amount DECIMAL(19,2);
但是,如果您要遵守公认会计原则(GAAP)规则,则货币栏必须至少包含4
位小数,以确保舍入值不超过$0.01
。 在这种情况下,应该定义具有4
位小数的列,如下所示:
amount DECIMAL(19,4);
MySQL DECIMAL数据类型示例
首先,创建一个名为test_order
的新表,其中包含三列:id
,description
和cost
。
CREATE TABLE test_order ( id INT AUTO_INCREMENT PRIMARY KEY, description VARCHAR(255), cost DECIMAL(19,4) NOT NULL );
第二步,将资料插入test_order表。
INSERT INTO test_order(description,cost) VALUES('Bicycle', 500.34),('Seat',10.23),('Break',5.21);
第三步,从test_order表查询数据。
SELECT * from test_order
第四步,更改cost
列以包含ZEROFILL
属性。
ALTER TABLE test_order MODIFY cost DECIMAL(19,4) zerofill;
第五步,再次查询test_order表。
SELECT * from test_order
查询结果:
如上所见,在输出值中填充了许多零。
因为zerofill,当我们插入负值会报错:
INSERT INTO test_order(description,cost) VALUES('test', -100.11); 提示: [SQL]INSERT INTO test_order(description,cost) VALUES('test', -100.11) [Err] 1264 - Out of range value for column 'cost' at row 1
其它插入测试结论:
当数值在其取值范围之内,小数位多了,则四舍五入后直接截断多出的小数位。
若数值在其取值范围之外,则直接报Out of range value错误。
【相关推荐:mysql视频教程】
Atas ialah kandungan terperinci Apakah jenis yang digunakan mysql untuk perpuluhan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!