Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách lưu số tiền PayPal (thập phân) vào cơ sở dữ liệu MySQL

PayPal và các cổng thanh toán thường dùng số thập phân **2 chữ số sau dấu phẩy** (ví dụ: 987664.50). Kiểu dữ liệu phù hợp nhất trong MySQL là DECIMAL(10,2) hoặc lớn hơn tùy số tiền tối đa.

  • DECIMAL(10,2): cho phép tối đa 99,999,999.99 (8 chữ số nguyên + 2 thập phân).
  • Nếu cần lớn hơn, dùng DECIMAL(19,4) (chuẩn tài chính) hoặc DECIMAL(15,2).

Ví dụ minh họa

mysql> CREATE TABLE DemoTable1491 (
    -> Amount DECIMAL(10,2)
    -> );
Query OK, 0 rows affected (0.66 sec)

mysql> INSERT INTO DemoTable1491 VALUES
    -> (987664.50),
    -> (18783874.90),
    -> (35363738.50);

mysql> SELECT * FROM DemoTable1491;

Kết quả:

+-------------+
| Amount      |
+-------------+
|   987664.50 |
| 18783874.90 |
| 35363738.50 |
+-------------+

Tại sao KHÔNG dùng FLOAT/DOUBLE?

  • FLOAT/DOUBLE là kiểu **dấu phẩy động (floating-point)** – bị sai số làm tròn nhị phân (ví dụ: 0.1 không biểu diễn chính xác).
  • Khi cộng/trừ tiền tệ, sai số tích lũy dẫn đến sai sót tài chính nghiêm trọng.
  • DECIMAL là **fixed-point** – lưu chính xác từng chữ số thập phân.

Best practice

  • Luôn dùng DECIMAL cho tiền tệ, giá cả, số lượng tồn kho cần chính xác.
  • Chọn M, D phù hợp: DECIMAL(19,4) là an toàn cho đa số ứng dụng thương mại điện tử.
  • Ở lớp ứng dụng (Java, PHP, Python...), dùng thư viện tiền tệ chuyên biệt (BigDecimal, decimal.Decimal, v.v.) và chuyển sang DECIMAL khi lưu DB.