ホームページ >バックエンド開発 >Python チュートリアル >Python で結果を四捨五入せずに float 値を切り捨てるにはどうすればよいですか?

Python で結果を四捨五入せずに float 値を切り捨てるにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-06 00:03:021006ブラウズ

How can I truncate a float value in Python without rounding the result?

四捨五入せずに浮動小数点値を切り捨てるにはどうすればよいですか?

浮動小数点数から桁を削除し、小数点以下の桁数を固定するには (1.923328437452 を 1.923 に変換するなど)では、次の関数を使用できます:

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]])

この関数は、浮動小数点を文字列に変換し、それを整数、小数点、および小数点の構成要素に分割し、それらを目的の数値で再結合することによって切り捨てを実現します。 10 進数の数字。 float が大きすぎて指数表記なしで表現できない場合は、最初にその形式に変換されます。

注: この関数は Python 2.7 および 3.1 と互換性があります。以前のバージョンの場合は、切り捨ての前に小数点以下 12 桁に四捨五入するなど、精度がやや劣る回避策を使用できます。

メソッドを理解する

切り捨て関数の背後にあるメソッドを理解するには、次のことを認識することが重要です。浮動小数点数はバイナリ表現としてコンピュータのメモリに保存され、意図した 10 進数表現と必ずしも一致するとは限りません。たとえば、0.3 と 0.29999999999999998 は両方とも同じバイナリ表現を使用して格納されます。

この曖昧さを解決するために、関数は洗練されたアルゴリズムを採用して、切り捨てに「最も適切な」10 進表現を選択します。これは、デフォルトの文字列書式設定操作を使用して浮動小数点数を文字列に変換することによって実現されます。この操作は、「g」形式の仕様を模倣し、最適な表現を自動的に選択します。

ただし、この方法でも結果が生じる可能性がある特定の特殊なケースがあります。 「偽陽性」では、四捨五入すべきではない数値が含まれます。このような場合、切り捨ての前に固定精度を指定する必要がある可能性があります。

追加メモ

意図的に丸めに近い非常に特殊な浮動小数点値を扱う場合、丸めずに float を切り捨てることが不可欠です。数値ですが、それらと等しくありません。ほとんどの実用的なアプリケーションでは、通常、丸めで十分です。

ここで紹介する関数は、切り捨て中に失われた桁も無視します。これは、残りの桁を調整する丸めとは異なります。このアプローチにより、切り捨てられた値が指定された小数点以下の桁で元の精度を維持することが保証されます。

以上がPython で結果を四捨五入せずに float 値を切り捨てるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。