Trong Python, các lớp thư viện chuẩn fractions.Fraction
và decimal.Decimal
tiêu chuẩn tồn tại để giúp giữ số học với số hữu tỷ một cách chính xác. Đối với không quen thuộc, một ví dụ về nơi nó giúp:Cách tốt nhất để chuyển đổi phân số.Fraction thành decimal.Decimal?
>>> 1/10 * 3
0.30000000000000004
>>> decimal.Decimal('1')/10 * 3
Decimal('0.3')
>>> fractions.Fraction('1')/10 * 3
Fraction(3, 10)
Câu hỏi của tôi là, nếu tôi có một Fraction
, cách tốt nhất để chuyển đổi nó vào một Decimal
là gì?
Thật không may là giải pháp rõ ràng không hoạt động:
>>> decimal.Decimal(fractions.Fraction(3, 10))
Traceback (most recent call last):
...
TypeError: conversion from Fraction to Decimal is not supported
Ngay bây giờ tôi đang sử dụng mã này:
>>> decimal.Decimal(float(fractions.Fraction(3, 10)))
Decimal('0.299999999999999988897769753748434595763683319091796875')
Bây giờ, khi tôi thực ra giá trị này, bất kỳ số tiền làm tròn chí chuyển đổi nó thành 0,3 và tôi chỉ thực hiện chuyển đổi này ngay trước khi xuất (tất cả các phép tính cốt lõi được thực hiện với Fraction
). Tuy nhiên, có vẻ hơi ngớ ngẩn với tôi rằng tôi không thể nhận được số Decimal('0.3')
từ số Fraction(3, 10)
. Bất kỳ trợ giúp sẽ được đánh giá cao!
Không hẳn. 'Decimal.decimal' vẫn là dấu chấm động, nó chỉ là dấu phảy động cơ bản-10. 'Thập phân (1)/Thập phân (3)' không thể đưa ra câu trả lời chính xác. –