web-dev-qa-db-ja.com

Python 2.7で小数点以下2桁に丸めますか?

Python 2.7を使用して、数値を10桁程度ではなく小数点以下2桁に丸めるにはどうすればよいですか?

print "financial return of outcome 1 =","$"+str(out1)
79
RCN

組み込み関数 round() を使用します。

>>> round(1.2345,2)
1.23
>>> round(1.5145,2)
1.51
>>> round(1.679,2)
1.68

または組み込み関数 format()

>>> format(1.2345, '.2f')
'1.23'
>>> format(1.679, '.2f')
'1.68'

または、新しいスタイルの文字列フォーマット:

>>> "{:.2f}".format(1.2345)
'1.23
>>> "{:.2f}".format(1.679)
'1.68'

または古いスタイルの文字列フォーマット:

>>> "%.2f" % (1.679)
'1.68'

roundのヘルプ:

>>> print round.__doc__
round(number[, ndigits]) -> floating point number

Round a number to a given precision in decimal digits (default 0 digits).
This always returns a floating point number.  Precision may be negative.
189

financial figureについて話しているので、浮動小数点演算を使用したくないDO NOT WANT Decimalを使用する方が良いでしょう。

>>> from decimal import Decimal
>>> Decimal("33.505")
Decimal('33.505')

新しいスタイルのformat()を使用したテキスト出力の書式設定(デフォルトは半偶数の丸め):

>>> print("financial return of outcome 1 = {:.2f}".format(Decimal("33.505")))
financial return of outcome 1 = 33.50
>>> print("financial return of outcome 1 = {:.2f}".format(Decimal("33.515")))
financial return of outcome 1 = 33.52

浮動小数点の不正確さによる丸めの違いを参照してください。

>>> round(33.505, 2)
33.51
>>> round(Decimal("33.505"), 2)  # This converts back to float (wrong)
33.51
>>> Decimal(33.505)  # Don't init Decimal from floating-point
Decimal('33.50500000000000255795384873636066913604736328125')

財務価値を丸める適切な方法

>>> Decimal("33.505").quantize(Decimal("0.01"))  # Half-even rounding by default
Decimal('33.50')

また、異なるトランザクションで他のタイプの丸めを行うことも一般的です。

>>> import decimal
>>> Decimal("33.505").quantize(Decimal("0.01"), decimal.ROUND_HALF_DOWN)
Decimal('33.50')
>>> Decimal("33.505").quantize(Decimal("0.01"), decimal.ROUND_HALF_UP)
Decimal('33.51')

返品結果をシミュレートしている場合は、セントの端数の支払いも受け取りもできず、セントの端数以上の利子も受け取れないため、各利息期間で丸める必要がある場合があることに注意してください。シミュレーションの場合、固有の不確実性のために浮動小数点を使用することは非常に一般的ですが、そうする場合は、エラーがあることを常に覚えておいてください。そのため、固定金利投資であっても、このため収益が少し異なる場合があります。

42
Ronan Paixão

str.format() も使用できます。

>>> print "financial return of outcome 1 = {:.2f}".format(1.23456)
financial return of outcome 1 = 1.23
5
TerryA

ペニー/整数を使用する場合。 115($ 1.15など)およびその他の数値で問題が発生します。

整数を浮動小数点数に変換する関数がありました。

...
return float(115 * 0.01)

それはほとんどの時間で機能しましたが、時々1.1500000000000001のようなものを返すでしょう。

だから私はこのように返すように関数を変更しました...

...
return float(format(115 * 0.01, '.2f'))

そして、それは1.15を返します。 '1.15'または1.1500000000000001ではありません(文字列ではなく、floatを返します)

私はほとんどこれを投稿しているので、これはグーグルでの最初の結果なので、このシナリオで何をしたか覚えています。

4
teewuane

Round()関数を使用すると、正しい値が得られません。

ラウンド(2.735)およびラウンド(2.725)を使用して確認できます

使ってください

import math
num = input('Enter a number')
print(math.ceil(num*100)/100)
2
Midhun M M

最善の方法は、 format() 関数を使用することです。

>>> print("financial return of outcome 1 = $ " + format(str(out1), '.2f'))
// Should print: financial return of outcome 1 = $ 752.60

しかし、私は言わなければならない:金融価値を扱うとき、ラウンドまたはフォーマットを使用しないでください。

2
Thiago Santos
print "financial return of outcome 1 = $%.2f" % (out1)
1
John Doe

次の0.05に切り上げて、次のようにします。

def roundup(x):
    return round(int(math.ceil(x / 0.05)) * 0.05,2)
0
Lucas VL

かなり簡単な回避策は、最初にフロートを文字列に変換し、最初の4つの数字のサブストリングを選択し、最後にサブストリングをフロートに戻すことです。例えば:

>>> out1 = 1.2345
>>> out1 = float(str(out1)[0:4])
>>> out1

非常に効率的ではないかもしれませんが、シンプルで動作します:)

0
Shan Niz