2012-07-24 24 views
6

Tôi đang viết một kịch bản PHP trông qua một bảng DB các giá trị float, mà có xu hướng hơi nhỏ, chẳng hạn như:Tại sao MySQL lại trả về một số ký tự trôi nổi trong ký pháp khoa học, nhưng không phải là một số khác?

0.00052 
0.00134 
0.00103 
0.00149 
0.00085 
0.00068 
0.00077 
0.00088 
0.00169 
0.00063 

Vì lý do lạ lẫm với tôi, một số giá trị xuất hiện trong DB trong khoa học ký hiệu, chẳng hạn như:

1.12305e-06

bảng này được thiết lập để nổi, và tôi đã thử tất cả các cách thức của các chức năng trong PHP để buộc các con số để hiển thị như thập phân, không có kết quả. Hãy thử như tôi có thể, tôi không thể để có được bảng số này được thống nhất trong tất cả các trường hợp.

Bất kỳ đề xuất nào về cách giải quyết vấn đề này? Đã thử đánh máy vào (float) và sử dụng number_format() và một số tùy chọn khác, nhưng không thay đổi mỗi lần.

+0

Không chắc chắn trên đầu của tôi, nhưng MySQL có hiển thị các giá trị trong ký pháp khoa học không? Tôi biết PHP chắc chắn. Bạn có thể hiển thị trường hợp kiểm tra hoàn chỉnh hơn về cách bạn xử lý các giá trị đó không? – deceze

+2

làm thế nào để bạn hiển thị chúng để tìm ra chúng ở định dạng này? Là nó mysql đó là trả lại cho họ như thế này, hoặc là nó thực sự chỉ là đại diện của php? bạn có sử dụng 'var_dump',' echo', 'print', v.v. không? – Nanne

+1

Bất kỳ lý do nào bạn không sử dụng kiểu dữ liệu 'DECIMAL'? – Romain

Trả lời

2

Dường như có giới hạn sáu chữ số về những gì được hiển thị trong CLI (và có thể ở nơi khác). Ví dụ bạn có là 1.12305e-06 là 0,00010112305 sẽ được hiển thị là 0,00000 - mặc dù rõ ràng không phải là 0.

Nếu bạn nhấn mạnh vào việc sử dụng phao hoặc đôi, bạn sẽ phải ép buộc chúng bằng cách sử dụng một cái gì đó như round(columnName,5) để buộc hiển thị theo giá trị thập phân. Nếu không, có thể chuyển sang kiểu dữ liệu thập phân.

Từ http://dev.mysql.com/doc/refman/5.0/en/floating-point-types.html

Bởi vì giá trị dấu chấm động là tương đối và không được lưu trữ như các giá trị chính xác, cố gắng đối xử với họ như chính xác trong sự so sánh có thể dẫn đến vấn đề này. Chúng cũng phụ thuộc vào nền tảng hoặc phụ thuộc triển khai. Để biết thêm thông tin, hãy xem Phần C.5.5.8, “Problems with Floating-Point Values

Cũng thấy điều này thread trên diễn đàn mysql về vấn đề chính xác này.

0

Giải pháp trong trường hợp của tôi hóa ra là thay đổi từ phao sang kiểu thập phân trong cơ sở dữ liệu, do đó, nhờ Romain cho nhận xét đã dẫn tôi xem xét giải pháp đó!

Các vấn đề liên quan