Trong PHP: number_format()
Hàm number_format() định dạng số với số chữ số thập phân và dấu phân cách tùy chọn.
Cú pháp
number_format(float $num, int $decimals = 0, string $dec_point = '.', string $thousands_sep = ','): string
Ví dụ
<?php $number1 = 10.3423; $number2 = 10; $result1 = number_format($number1, 2); // "10.34" $result2 = number_format($number2, 2); // "10.00" echo $result1 . '
'; // 10.34 echo $result2 . '
'; // 10.00 ?>
Kết quả
10.34 10.00
Với dấu phân cách hàng nghìn
echo number_format(1234567.89, 2, '.', ','); // "1,234,567.89" echo number_format(1234567.89, 2, ',', '.'); // "1.234.567,89" (định dạng VN/EU)
Trong MySQL: FORMAT() và ROUND()
FORMAT() - Trả về STRING
mysql> SELECT FORMAT(10.3423, 2); -- '10.34' mysql> SELECT FORMAT(10, 2); -- '10.00' mysql> SELECT FORMAT(1234567.89, 2); -- '1,234,567.89' (có dấu phẩy nghìn)
ROUND() - Trả về NUMBER
mysql> SELECT ROUND(10.3423, 2); -- 10.34 (kiểu số) mysql> SELECT ROUND(10.345, 2); -- 10.35 (làm tròn chuẩn) mysql> SELECT ROUND(10, 2); -- 10 (không thêm .00)
CAST/DECIMAL cho cột
SELECT CAST(price AS DECIMAL(10,2)) FROM products;
So sánh
| Hàm | Trả về | Dùng cho |
|---|---|---|
| PHP number_format() | String | Hiển thị web, export CSV/Excel |
| MySQL FORMAT() | String | Hiển thị trực tiếp từ SQL |
| MySQL ROUND() | Number | Tính toán tiếp, lưu DB |
| CAST AS DECIMAL | Number | Định nghĩa schema, tính toán chính xác |
Lưu ý tiền tệ
Đối với tiền tệ, luôn dùng DECIMAL thay vì FLOAT/DOUBLE để tránh lỗi làm tròn binary floating point:
-- Tốt price DECIMAL(12,2) -- Tránh price FLOAT price DOUBLE