Tôi muốn lưu trữ 3.50 vào bảng mysql. Tôi có một cái phao mà tôi cất giữ nó, nhưng nó lưu trữ là 3.5, không phải là 3.50. Làm thế nào tôi có thể làm cho nó có dấu 0?lưu trữ số tiền trong mysql
Trả lời
Không lưu trữ các giá trị tiền như phao, sử dụng thập phân hoặc kiểu NUMERIC:
Documentation for MySQL Numeric Types
EDIT & làm rõ:
giá trị Float là dễ bị tổn thương để làm tròn lỗi được họ đã chính xác giới hạn vì vậy trừ khi bạn không quan tâm rằng bạn chỉ nhận được 9,99 thay vì 10,00 bạn nên sử dụng DECIMAL/NUMERIC vì chúng là số điểm cố định không có vấn đề như vậy.
Có thực sự quan trọng nếu nó lưu trữ là 3.5, 3.50 hoặc thậm chí 3.500?
Điều gì thực sự quan trọng là cách nó được hiển thị sau khi nó được lấy từ db.
Hoặc tôi có thiếu gì đó ở đây không?
Cũng không sử dụng phao, sử dụng số thập phân. Float có tất cả các loại vấn đề làm tròn và không phải là rất lớn.
Tại sao bạn muốn lưu trữ "3.50" vào cơ sở dữ liệu của mình? 3.5 == 3.50 == 3.5000 cho đến khi cơ sở dữ liệu liên quan.
Trình bày và định dạng số liệu/ngày/v.v. của bạn nên được thực hiện trong ứng dụng, không phải trong cơ sở dữ liệu.
Nếu bạn sử dụng kiểu DECIMAL hoặc NUMERIC, bạn có thể khai báo chúng như ví dụ DECIMAL (18, 2) sẽ buộc 2 số thập phân ngay cả khi chúng bằng 0. Tùy thuộc vào giá trị lớn mà bạn mong đợi bạn có thể thay đổi giá trị của tham số đầu tiên.
Để giá trị cửa hàng bạn có thể sử dụng một DECIMAL (10,2) lĩnh vực, sau đó bạn có thể sử dụng chức năng FORMAT:
SELECT FORMAT(`price`, 2) FROM `table` WHERE 1 = 1
Nó không phải nói chung là một ý tưởng tốt để lưu trữ tiền như một phao như làm tròn lỗi có thể xảy ra trong tính toán.
Cân nhắc sử dụng DECIMAL (10,2) thay thế.
Ngay cả những con số như 0,1 và 0,2 là không thể đại diện trong điểm nổi nhị phân, không có vấn đề gì chính xác là. http: //en.wikipedia.org/wiki/Floating_point – Ray
Nhị phân không thể đại diện chính xác các điểm nổi chỉ với số bit giới hạn. Dữ liệu đó không bị mất nhiều dữ liệu nhưng thực sự là lỗi chuyển đổi .. Here's the manual giving examples
Bạn có thể thấy điều này trong hành động trong trình duyệt của mình, tự xem đoạn mã này.
<script>
var floatSum = 0;
// add 0.1 to floatSum 10 times
for (var i=0; i<10; i++) {
floatSum += 0.1;
}
// if the repetative adding was correct, the floatSum should be equal to 1
var expectedSum = 10*0.1; // 1
// you can see that floatSum does not equal 1 because of floating point error
document.write(expectedSum + " == " + floatSum + " = " + (expectedSum==floatSum) + "<br />");
// --- using integers instead ---
// Assume the example above is adding £0.10 ten times to make £1.00
// With integers, we will use store money in pence (100 pence (also written 100p) in £1)
var intSum = 0;
// add 0.1 to floatSum 10 times
for (var i=0; i<10; i++) {
intSum += 10;
}
// if the repetative adding was correct, the floatSum should be equal to 1
var expectedSum = 10*10; // 100
// you can see that floatSum does not equal 1 because of floating point error
document.write(expectedSum + " == " + intSum + " = " + (expectedSum==intSum) + "<br />");
document.write("To display as £ instead of pence, we can divide by 100 (presentation only) : £" + intSum/100 + "<br />");
</script>
- 1. PHP/MySQL: Hoạt động lưu trữ/lưu trữ tiền tốt nhất?
- 2. Lưu trữ các số nguyên rất lớn trong MySQL
- 3. lưu trữ giá trị âm trong mysql
- 4. Lưu trữ mảng byte Mysql
- 5. Lưu trữ phần trăm trong Rails + MySQL
- 6. Cách lưu trữ URL trong MySQL
- 7. Lưu trữ các giá trị tiền tệ trong SQLite3
- 8. mysql lưu trữ-thủ tục: ra tham số
- 9. lưu trữ dữ liệu JSON trong mysql
- 10. Lưu trữ mật khẩu băm trong MySQL
- 11. bảng lưu trữ mysql truncate
- 12. Mysql trái tham gia và số tiền
- 13. Gọi thủ tục lưu trữ trong một thủ tục được lưu trữ trong MySQL
- 14. quá tải MySQL lưu trữ chức năng
- 15. Lưu trữ micro giây trong MySQL: cách giải quyết nào?
- 16. Thủ tục lưu trữ MySQL Quyền
- 17. Cách lưu trữ hàng/cột dữ liệu mysql trong mảng
- 18. Thủ tục lưu trữ MySQL: Boolean Logic trong IF THEN
- 19. Android: Gửi dữ liệu được lưu trữ trong MySQL
- 20. chức năng lưu trữ đệ quy trong MySQL
- 21. lưu trữ dữ liệu nhị phân trong mysql
- 22. Làm thế nào để lưu trữ unicode trong MySQL?
- 23. Tạo breadcrumbs các loại lưu trữ trong MySQL
- 24. Lưu trữ Enums trong Cơ sở dữ liệu MySQL
- 25. Cách lưu trữ chuỗi JSON trong MySQL db
- 26. giá trị băm Lưu trữ SHA1 trong MySQL
- 27. Làm cách nào để lưu trữ hình ảnh trong MySQL?
- 28. Trong đó Địa điểm Mysql Compiled Thủ tục lưu trữ?
- 29. FILESTREAM lưu trữ trong SqlServer -> MySQL tương đương?
- 30. Thay đổi công cụ lưu trữ của bảng trong Mysql
tôi làm đề cập đến vấn đề làm tròn. Quan điểm của tôi là anh ta không nên lo lắng về việc nó được lưu trữ như thế nào nhưng nó được hiển thị như thế nào. Bạn sẽ không lưu trữ thông tin tài chính đến 2 chữ số thập phân - tỷ giá hối đoái là 5 và chúng tôi lưu trữ thành 6 nhưng chỉ hiển thị là 2. –
(đã xóa nhận xét không liên quan trước đó). 1 cho điểm tốt về làm tròn. –