Sử dụng hàm ROUND() để làm tròn số thực (FLOAT/DOUBLE/DECIMAL) đến số chữ số thập phân mong muốn.
Cú pháp
SELECT ROUND(tên_cột, số_chữ_số_thập_phân) FROM tên_bảng;
Ví dụ minh họa
Tạo bảng demo:
mysql> CREATE TABLE givenPrecisionDemo (Amount FLOAT);
Chèn dữ liệu:
mysql> INSERT INTO givenPrecisionDemo(Amount) VALUES (45.678), (123.456), (245.890), (980.678);
Xem dữ liệu gốc:
mysql> SELECT * FROM givenPrecisionDemo;
+---------+ | Amount | +---------+ | 45.678 | | 123.456 | | 245.89 | | 980.678 | +---------+
Làm tròn 2 chữ số thập phân:
mysql> SELECT ROUND(Amount, 2) FROM givenPrecisionDemo;
+-----------------+ | ROUND(Amount,2) | +-----------------+ | 45.68 | | 123.46 | | 245.89 | | 980.68 | +-----------------+
Quy tắc làm tròn (Round half up)
- Chữ số sau vị trí làm tròn ≥ 5 → làm tròn lên
- Chữ số sau vị trí làm tròn < 5 → giữ nguyên
- Ví dụ: ROUND(45.678, 2) → 45.68 (vì 8≥5)
Các hàm liên quan
| Hàm | Hành vi | Ví dụ ROUND(x,0) |
|---|---|---|
| ROUND(x, d) | Làm tròn đến d chữ số thập phân | ROUND(1.5)=2, ROUND(2.5)=2* |
| CEIL(x) / CEILING(x) | Làm tròn LÊN đến số nguyên gần nhất | CEIL(1.1)=2, CEIL(-1.1)=-1 |
| FLOOR(x) | Làm tròn XUỐNG đến số nguyên gần nhất | FLOOR(1.9)=1, FLOOR(-1.1)=-2 |
| TRUNCATE(x, d) | Cắt bỏ (không làm tròn) đến d chữ số | TRUNCATE(1.999,2)=1.99 |
* MySQL dùng "banker's rounding" cho ROUND(x,0): .5 làm tròn đến số chẵn gần nhất.
Làm tròn trong UPDATE
UPDATE products SET price = ROUND(price * 1.1, 2); -- Tăng 10%, làm tròn 2 chữ số
⚠️ Vấn đề FLOAT/DOUBLE
FLOAT/DOUBLE là số thực dấu chấm động (binary floating-point), không biểu diễn chính xác số thập phân (ví dụ 0.1). Dùng DECIMAL cho tiền tệ/độ chính xác cao.
SELECT ROUND(CAST(45.678 AS DECIMAL(10,3)), 2); -- Chính xác hơn