末尾のゼロについて話しているので、これは文字列としての表現に関する質問です。使用できます
>>> "%.2f" % round(2606.89579999999, 2)
'2606.90'
または、format
機能を備えたモダンなスタイルを使用します。
>>> '{:.2f}'.format(round(2606.89579999999, 2))
'2606.90'
replace
orを使用してポイントを削除しますtranslate
( _
Python コンソールでの前のコマンドの結果を参照します):
>>> _.translate(None, '.')
'260690'
.2f
format は同じ丸めを適用するため、ここでは丸めは必要ないことに注意してください。
>>> "%.2f" % 2606.89579999999
'2606.90'
しかし、あなたがExcelに言及したように、浮動小数点表現のために奇妙な結果につながる可能性があるため、おそらく独自の丸め関数をロールするか、 decimalを使用することを選択するでしょう:float.round
>>> round(2.675, 2)
2.67
>>> round(2606.89579999999, 2)
2606.89
10 進数ではquantizeを使用します。
>>> from decimal import *
>>> x = Decimal('2606.8950000000001')
# Decimal('2606.8950000000001')
>>> '{}'.format(x.quantize(Decimal('.01'), rounding=ROUND_HALF_EVEN))
'2606.90'
元のタスクでは、次のようになります。
>>> x = Decimal('2606.8950000000001')
>>> int((x*100).quantize(1, rounding=ROUND_HALF_EVEN))
260690
そして、奇妙な丸めの理由は次のように前面に出てきDecimal
ます:
>>> x = Decimal(2606.8950000000001)
# Decimal('2606.89499999999998181010596454143524169921875') # internal float repr