Pythonでは、fractions.Fraction
とdecimal.Decimal
の標準ライブラリクラスが存在し、有理数の計算を正確に保つのに役立ちます。それは助けどこのなじみのない、例えば:私はFraction
を持っている場合分数を小数点以下に変換する最良の方法。
>>> 1/10 * 3
0.30000000000000004
>>> decimal.Decimal('1')/10 * 3
Decimal('0.3')
>>> fractions.Fraction('1')/10 * 3
Fraction(3, 10)
私の質問は、ある、Decimal
に変換するための最良の方法は何ですか?
残念ながら、明白な解決策は動作しません:とき私は実際に出力この値は、意志を丸め任意の量の、今
>>> decimal.Decimal(float(fractions.Fraction(3, 10)))
Decimal('0.299999999999999988897769753748434595763683319091796875')
:
>>> decimal.Decimal(fractions.Fraction(3, 10))
Traceback (most recent call last):
...
TypeError: conversion from Fraction to Decimal is not supported
は、今のところ私はこのコードを使用していますそれを0.3に変換し、出力の直前にこの変換を行います(すべてのコアの計算はFraction
で行われます)。それでも、Fraction(3, 10)
からDecimal('0.3')
を得ることができないということは私にはちょっとばかげているようです。どんな助けもありがとう!
「Pythonでの、 'fractions.Fraction'と' decimal.Decimal'標準ライブラリクラスは、正確な有理数で算術演算を保つのを助けるために存在しています。」まあまあ。 'Decimal.decimal'はまだ浮動小数点ですが、それはちょうど10進の浮動小数点です。 'Decimal(1)/ Decimal(3)'は正確な答えを与えることはできません。 –