これは何度も尋ねられていますが、私は多くのブログとその答えに出くわしましたが、これは私が私の髪を引っ張るようにしています。私はちょうどので、私はその小数を取り除く100で2進数を乗算します:Python DecimalとC#の小数精度
>>> 4321.90 * 100
432189.99999999994
>>> Decimal(4321.90) * Decimal(100)
Decimal('432189.9999999999636202119291')
私は、このような一見些細な操作に丸め使用して怖いです。それは安全でしょうか?精密な問題が私のトリックを演じ、その結果がxxx.5に近ければどうなるでしょうか?それは起こることができますか?私は、バイナリレベルでの問題を理解しますが、私は、C#から来て、私は、.NETのdecimal
タイプでその問題を持っていない:
decimal x = 4321.90m;
decimal y = 100m;
Console.WriteLine(x * y);
432190,00
私はPythonのdecimalモジュールは、これを修正することになったと思いました。私は初期値を文字列に変換しようとしていますが、文字列操作で数学を行います。
リテラル '4321.90'バイナリフロートは関係なく、それがどのように表示されるコンテキストではありません。つまり、あなたが渡している小数点以下の値を 'Decimal()'コンストラクタに渡すことはありません。代わりに 'Decimal(" 4321.90 ")'という綴りを付けてください。 –
これは常に小数点以下の2桁の数字です。文字列に変換し、ドット '。'を置き換えます。何もない。 –
@ Ev.Kounisこれは文字列操作であり、私はむしろこれをやっていません。 – Jerther