web-dev-qa-db-ja.com

293.4662543のような浮動小数点数をPythonで293.47に変換する方法は?

私が得た浮動小数点の結果を短縮する方法は?ドットの後には2桁しか必要ありません。申し訳ありませんが、英語でこれをよりよく説明する方法が本当にわかりません...

ありがとう

23
Shane

浮動小数点ガイドの Pythonチートシート から:

"%.2f" % 1.2399 # returns "1.24"
"%.3f" % 1.2399 # returns "1.240"
"%.2f" % 1.2 # returns "1.20"

Floatは 2進分数 であり、cannotは10進数を正確に表すため、round()を使用するのは間違っています。

10進数で計算する必要がある場合は、Decimalモジュールでdecimalタイプを使用します。

45

数値が必要な場合は、 round() 関数を使用します。

>>> round(12.3456, 2)
12.35

(ただし、マイケルの回答の+1はDecimalタイプです。)

文字列が必要な場合:

>>> print "%.2f" % 12.34567
12.35
22
RichieHindle

From: Python Docs round(x [、n])小数点以下n桁に丸められた浮動小数点値xを返します。 nを省略すると、デフォルトでゼロになります。結果は浮動小数点数です。値は、10の累乗からnを引いた最も近い倍数に丸められます。 2つの倍数が等しい場合、丸めは0から離れて行われます(たとえば、round(0.5)は1.0、round(-0.5)は-1.0)。

注floatのround()の動作は驚くべきものになる可能性があります。たとえば、round(2.675、2)は、期待される2.68ではなく2.67を返します。これはバグではありません。これは、ほとんどの小数部が浮動小数点として正確に表現できないという事実の結果です。詳細については、浮動小数点演算:問題と制限を参照してください。

まるで(293.466 .... [、2])のように見えますが、

7
onaclov2000

これがお役に立てば幸いです。

def do(*args):
    formattedList = [float("{:.2f}".format(num)) for num in args]
    _result =(sum(formattedList))
    result = round(_result,2)
    return result


print(do(23.2332,45.24567,67,54.27))

結果:

189.75
6
Xavi Martínez

x = round(293.4662543, 2)

5
Ethan Shepherd
>>> print "%.2f" % 293.44612345
293.45
3
ghostdog74

一方通行:

>>> number = 1
>>> '{:.2f}'.format(number) #1.00
>>> '{:.3f}'.format(number) #1.000

第二の方法:

>>> '%.3f' % number #1.000
>>> '%.3f' % number #1.000

「フォーマットpython」を参照

1
AlexNikonov

2.3kまたは12Mのような数値が必要な場合、この関数が機能します。

def get_shortened_integer(number_to_shorten):
    """ Takes integer and returns a formatted string """
    trailing_zeros = floor(log10(abs(number_to_shorten)))
    if trailing_zeros < 3:
        # Ignore everything below 1000
        return trailing_zeros
    Elif 3 <= trailing_zeros <= 5:
        # Truncate thousands, e.g. 1.3k
        return str(round(number_to_shorten/(10**3), 1)) + 'k'
    Elif 6 <= trailing_zeros <= 8:
        # Truncate millions like 3.2M
        return str(round(number_to_shorten/(10**6), 1)) + 'M'
    else:
        raise ValueError('Values larger or equal to a billion not supported')

結果:

>>> get_shortened_integer(2300)
2.3k # <-- str

>>> get_shortened_integer(1300000)
1.3M # <-- str
1
chribsen