Chúng tôi sử dụng double
.
* thở hổn hển *
Tại sao?
Bởi vì nó có thể đại diện cho bất kỳ số 15 chữ số nào mà không có ràng buộc về vị trí của dấu thập phân . Tất cả chỉ vì 8 byte!
Vì vậy, nó có thể đại diện:
0.123456789012345
123456789012345.0
... Và bất cứ điều gì ở giữa.
Điều này rất hữu ích vì chúng tôi đang giao dịch với các loại tiền tệ toàn cầu và double
có thể lưu trữ nhiều số thập phân khác nhau mà chúng tôi có thể gặp phải.
Một double
trường duy nhất có thể đại diện cho 999.999.999.999.999 bằng đồng Nhật Bản, 9,999.999.999.999,99,99 đô la Mỹ và thậm chí 9,999.999.999999999 bằng bitcoin
Nếu bạn thử làm tương tự với decimal
, bạn cần decimal(30, 15)
chi phí 14 byte.
Hãy cẩn thận
Tất nhiên, sử dụng double
không phải không có sự cẩn thận.
Tuy nhiên, nó không mất độ chính xác như một số xu hướng chỉ ra. Mặc dù double
bản thân nó có thể không chính xác trong hệ thống cơ sở 10 , chúng ta có thể làm cho nó chính xác bằng cách làm tròn giá trị chúng ta kéo từ cơ sở dữ liệu đến các vị trí thập phân quan trọng của nó. Nếu cần đó là. (ví dụ: Nếu nó sẽ được xuất ra, và cần có đại diện cơ sở 10.)
Hãy cẩn thận, bất cứ khi nào chúng tôi thực hiện số học với nó, chúng tôi cần bình thường hóa kết quả (bằng cách làm tròn nó đến các vị trí thập phân quan trọng của nó) trước:
- Thực hiện so sánh trên đó.
- Viết lại cho cơ sở dữ liệu.
Một loại cảnh báo khác là, không giống như decimal(m, d)
nơi cơ sở dữ liệu sẽ ngăn các chương trình chèn một số có nhiều hơn m
chữ số, không có xác nhận nào như vậy tồn tại double
. Một chương trình có thể chèn một người dùng nhập giá trị 20 chữ số và cuối cùng nó sẽ được ghi âm một cách không chính xác.
deimal(10,2)
là những gì tôi sử dụng ... bạn có thể điều chỉnh các giá trị tùy thuộc vào kích thước dự kiến