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

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

Susan Sarandon
リリース: 2024-11-05 19:51:02
オリジナル
772 人が閲覧しました

How to Truncate Float Values in Python Without Rounding?

丸めずに浮動小数点値を切り捨てる方法?

四捨五入せずに浮動小数点値を特定の小数点以下の桁数に切り捨てるには、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 進表現をインテリジェントに選択します。

古い Python バージョンの代替方法

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート