四捨五入せずに浮動小数点値を特定の小数点以下の桁数に切り捨てるには、Python で 'truncate( )' 関数。この関数は 2 つの引数を取ります。切り捨てられる浮動小数点値と保持する小数点以下の桁数です。インテリジェントな丸めを使用する関数の実装を次に示します。
def truncate(f, n): '''Truncates/pads a float f to n decimal places without rounding''' s = '{}'.format(f) if 'e' in s or 'E' in s: return '{0:.{1}f}'.format(f, n) i, p, d = s.partition('.') return '.'.join([i, (d+'0'*n)[:n]])
この関数は、完全な精度が確実に保持されるように、float を文字列に変換します。次に、文字列を整数部分、小数点、および 10 進数の 3 つの部分に分割します。 10 進数を保持し、必要に応じてゼロを埋め込み、部分を再結合して切り捨てられた文字列を形成します。
場合によっては、浮動小数点数を 10 進数で正確に表すことができない場合があります。表記。たとえば、正確に 0.3 は、IEEE 浮動小数点として正確に表現できますが、10 進数としては表現できません。このような場合、関数は Python 2.7 以降で提供されるデフォルトの文字列フォーマット操作を使用します。この操作は、四捨五入せずに、float の最も近い 10 進表現をインテリジェントに選択します。
2.7 または 3.0 より前の Python バージョンを使用している場合は、結果を文字列としてフォーマットする前に、浮動小数点数を浮動小数点以下の桁数 (例: 12) に丸めます。このアプローチは精度はそれほど高くありませんが、ほとんどの場合にうまく機能します。
def truncate(f, n): '''Truncates/pads a float f to n decimal places without rounding''' s = '%.12f' % f i, p, d = s.partition('.') return '.'.join([i, (d+'0'*n)[:n]])
インテリジェントな丸めでは、意図しない数値が丸められる誤検出が発生する可能性があることに注意してください。これを回避するには、固定精度を使用できます。さらに、以前の Python バージョンでは不正確な 10 進表現が生成される可能性があります。このような場合は、12 桁の回避策を使用することをお勧めします。
以上がPythonで四捨五入せずに浮動小数点値を切り捨てるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。