浮動小数点値の切り捨て、または指定された小数点以下の桁数を超える桁の削除は、プログラミングにおける一般的な操作です。ただし、浮動小数点表現の制限により、丸めずに正確な切り捨てを実現することは困難な場合があります。
次の例を考えてみましょう。
1.923328437452 -> 1.923
単純アプローチとしては、浮動小数点を文字列に変換して切り捨てることになりますが、浮動小数点表現の不正確な性質により、エラーが発生する可能性があります。異なる浮動小数点値が同じバイナリ表現を持つ場合があり、その結果、あいまいな切り捨てが行われる可能性があります。
Python バージョン 2.7 以降の場合、次の関数は丸めなしで正確な切り捨てを提供します。
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]])
このメソッドの核心は、'{}'.format(f) を使用して float を文字列に変換し、その文字列を必要な小数点以下の桁数に切り捨てることです。科学的表記法 ('e' または 'E') の値の場合、'{0:.{1}f}'.format(f, n) 構文を使用して精度を指定します。
まれに、丸め数値に非常に近い浮動小数点数が依然として誤って切り捨てられることがあります。このような場合は、より高い精度を指定して、文字列変換中の丸めが結果に影響しないようにします。
Python バージョン 2.7 より前の場合、精度の低い方法で丸めが行われます。切り捨ての前に浮動小数点を小数点以下 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]])
このコードは、四捨五入せずに浮動小数点値を切り捨てる堅牢なソリューションを提供し、広範囲の入力に対して正確な切り捨てを保証します。
以上が四捨五入せずに浮動小数点値を正確に切り捨てるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。