Trong chương trình của tôi, độ chính xác thập phân là rất quan trọng.
Rất nhiều phép tính của tôi phải chính xác đến nhiều chữ số thập phân (chẳng hạn như 50).Các vấn đề với số thập phân làm tròn (trăn)
Bởi vì tôi đang sử dụng python, tôi đã sử dụng các mô-đun thập phân (với ngữ cảnh() prec = 99. ví dụ;. Set có 99 chữ số thập phân của độ chính xác khi instantiating một đối tượng thập phân)
như pythonic phao không cho phép bất cứ nơi nào gần độ chính xác như vậy.
Vì tôi muốn Người dùng chỉ định vị trí thập phân của tính chính xác của các phép tính, tôi phải triển khai một số hàm round() trong mã của mình.
Unfortuneately, các chức năng tròn inbuilt và các đối tượng thập phân không tương tác tốt.
round(decimal.Decimal('2.000000000000000000001'),50)
# Number is 1e-21. There are 21 decimal places, much less than 50.
Tuy nhiên, kết quả là 2.0 thay vì 2,000000000000000000001
Chức năng vòng không được làm tròn đến 50. ít nhiều!
Có, tôi đã đảm bảo rằng việc làm tròn không xảy ra khi khởi tạo đối tượng thập phân, nhưng sau khi gọi vòng.
Tôi luôn truyền các chuỗi đại diện cho phao cho hàm tạo thập phân, không bao giờ là phao nổi.
Tại sao hàm tròn làm việc này với tôi?
(Tôi nhận ra rằng nó có thể được thiết kế ban đầu cho phao nổi mà không bao giờ có nhiều chữ số thập phân, nhưng tài liệu tuyên bố rằng đối tượng thập phân tích hợp hoàn toàn vào mã python và tương thích với các hàm python sẵn có!)
Cảm ơn rất nhiều!
(Điều này đã cho tôi khá mất bình tĩnh, vì vấn đề này sẽ làm suy yếu việc sử dụng của toàn bộ chương trình)
Specs:
python 2.7.1
Windows 7
mô-đun thập phân (inbuilt)
Ý của bạn là để trừ 2 sau khi làm tròn? – celtschk
Xin lỗi, đó là lỗi đánh máy –
Bạn không biết câu trả lời đúng là gì? Aroth trả lời câu hỏi của tôi, nhưng Raymond đã đưa ra giải pháp! –