2009-01-02 37 views
5

Mã của tôi:Floating Point Hạn chế

a = '2.3' 

tôi muốn hiển thị a như một giá trị dấu chấm động.

Kể từ a là một chuỗi, tôi đã cố gắng:

float(a) 

Kết quả tôi nhận được:

2.2999999999999998 

Tôi muốn có một giải pháp cho vấn đề này. Làm ơn, vui lòng giúp tôi.

Tôi đã theo dõi this tutorial.

+0

@ rejinacm.myopenid.com: bạn có thể muốn xóa nhận xét "Đây là một nhược điểm của Python". ! –

+8

-1 đối với những người đã downvoted câu hỏi này thay vì sửa nó! –

+1

Trùng lặp: http://stackoverflow.com/questions/286061/python-decimal-place-issues-with-floats, http://stackoverflow.com/questions/286061/python-decimal-place-issues-with-floats –

Trả lời

18

Tôi nghĩ nó phản ánh nhiều hơn về sự hiểu biết của bạn về các loại điểm động so với trên Python. Xem my article about floating point numbers (dựa trên .NET, nhưng vẫn có liên quan) vì những lý do đằng sau "không chính xác" này. Nếu bạn cần giữ biểu diễn thập phân chính xác, bạn nên sử dụng decimal module.

+0

số thập phân trả về một chuỗi. Tôi chỉ muốn một loại phao. – user46646

+0

@rejinacm - loại phao không chính xác, giấy của bạn thực sự giải thích điều này ở cuối và giải thích lý do tại sao điều này xảy ra. –

+0

Thập phân không "trả về" một chuỗi - bạn * có thể * chuyển đổi thành chuỗi, nhưng giá trị thập phân chỉ là giá trị, bạn có thể thao tác riêng ... Nếu bạn thực sự cần float vì bất kỳ lý do nào, bạn cần chấp nhận rằng bạn sẽ không thể đại diện cho 2.3 chính xác trong đó. –

6

Đây không phải là nhược điểm của python, thay vào đó, đó là nhược điểm của cách số dấu phẩy động được lưu trữ trên máy tính. Bất kể ngôn ngữ thực hiện, bạn sẽ tìm thấy các vấn đề tương tự.

Bạn nói rằng bạn muốn 'hiển thị' A làm điểm nổi, tại sao không chỉ hiển thị chuỗi? Trực quan nó sẽ giống hệt với những gì bạn mong đợi.

Như Jon đã đề cập, nếu nhu cầu của bạn không chỉ là 'hiển thị' số dấu chấm động, bạn nên sử dụng mô-đun thập phân để lưu trữ biểu diễn chính xác.

4

Câu trả lời hay giải thích lý do. Tôi chỉ muốn thêm một giải pháp thực tế có thể từ thư viện chuẩn:

>>> from decimal import Decimal 
>>> a = Decimal('2.3') 
>>> print a 
2.3 

Đây thực sự là (rất) F.A.Q. cho Python và bạn có thể read the answer here.


Chỉnh sửa: Tôi vừa nhận thấy rằng John Skeet đã đề cập đến điều này. Oh well ...