Có thể bạn đang tìm kiếm FORMAT
hoặc ROUND
chức năng:
Sử dụng FORMAT()
, tùy thuộc vào ngôn ngữ của bạn và nhu cầu cụ thể của bạn, bạn có thể phải thay thế dấu phân cách hàng nghìn :
mysql> SELECT FORMAT(9.755046187483832e17,0);
975,504,618,748,383,200
mysql> SELECT REPLACE(FORMAT(9.755046187483832e17,0), ',','');
975504618748383200
Mặt khác, ROUND()
là một số chức năng, nó chỉ xuất ra chữ số :
mysql> SELECT ROUND(9.755046187483832e17,0);
975504618748383200
Xem http://sqlfiddle.com/#!2/d41d8/17614 để chơi với nó.
CHỈNH SỬA: Như bạn đã nhận thấy, hai chữ số cuối cùng được làm tròn thành 00 . Đó là do DOUBLE
giới hạn độ chính xác. Bạn phải nhớ rằng đôi là gần đúng . Nếu bạn cần các giá trị chính xác và / hoặc nhiều chữ số hơn khả dụng với độ chính xác 16 bit là gấp đôi, bạn có thể cần thay đổi loại cột của mình thành DECIMAL
. Theo mặc định DECIMAL
có độ chính xác 10 chữ số (10 cơ số 10 chữ số). Bạn có thể yêu cầu tối đa 65 chữ số một cách rõ ràng.
Ví dụ:nếu bạn cần độ chính xác lên đến 20 chữ số, bạn viết đại loại như vậy:
CREATE TABLE tbl (myValue DECIMAL(20), ...
Xem http://dev.mysql.com/ doc / refman / 5.6 / en / fixed-point-styles.html
Tuy nhiên, xin lưu ý rằng mọi thứ không không thật đơn giản. Việc chọn cột thập phân có thể chuyển nó thành double (hoặc bigint ?) do đó làm mất độ chính xác bổ sung. Bạn có thể phải ép kiểu thành chuỗi một cách rõ ràng để duy trì độ chính xác đầy đủ. Điều đó có nghĩa là bạn có thể phải giải quyết vấn đề đó ở cấp ứng dụng.
create table tbl (dblValue DOUBLE, decValue DECIMAL(20,0));
insert into tbl values (975504618748383289, 975504618748383289);
SELECT dblValue, decValue FROM tbl;
--> DBLVALUE DECVALUE
--> 975504618748383200 975504618748383200
SELECT CAST(dblValue AS CHAR), CAST(decValue AS CHAR) FROM tbl;
--> CAST(DBLVALUE AS CHAR) CAST(DECVALUE AS CHAR)
--> 9.755046187483832e17 975504618748383289
Xem http://sqlfiddle.com/#!2/d5f58/2 để làm ví dụ.