1.必要な精度が低い
高精度の浮動小数点数を低精度の浮動小数点数に変換します。
1.round()組み込みメソッド
round()は単純な丸めメソッドではありません。
>>> round(2.5)
2
>>> round(1.5)
2
>>> round(2.675)
3
>>> round(2.675, 2)
2.67
round()パラメータとして数値が1つしかない場合、桁数が指定されていない場合は整数を返し、最も近い整数になります(これは丸めに似ています)。ただし、.5が表示される場合、両側の距離は同じであり、round()は最も近い偶数の2を取ります。
四捨五入する小数点数を指定する場合は、通常、四捨五入のルールが使用されますが、.5の場合、四捨五入する桁数の前の小数が奇数の場合は直接破棄され、でも、切り上げられます。
以下の例を参照してください。
>>> round(2.635, 2)
2.63
>>> round(2.645, 2)
2.65
>>> round(2.655, 2)
2.65
>>> round(2.665, 2)
2.67
>>> round(2.675, 2)
2.67
2.フォーマットを使用する
効果はround()と同じです。
>>> a = ("%.2f" % 2.635)
>>> a
'2.63'
>>> a = ("%.2f" % 2.645)
>>> a
'2.65'
>>> a = int(2.5)
>>> a
2
2.17桁以上を必要とする精密分析
Pythonのデフォルトの精度は小数点以下17桁ですが、ここで問題があります。計算でより高い精度(小数点以下17桁以上)を使用する必要がある場合はどうすればよいですか?
1.フォーマットを使用します(非推奨)
>>> a = "%.30f" % (1/3)
>>> a
'0.333333333333333314829616256247'
2. 10進モジュールを高精度で使用し、getcontextと連携します
>>> from decimal import *
>>> print(getcontext())
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,
capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero,
Overflow])
>>> getcontext().prec = 50
>>> b = Decimal(1)/Decimal(3)
>>> b
Decimal('0.33333333333333333333333333333333333333333333333333')
>>> c = Decimal(1)/Decimal(17)
>>> c
Decimal('0.058823529411764705882352941176470588235294117647059')
>>> float(c)
0.058823529411764705
デフォルトのコンテキスト精度は28ビットで、50ビット以上に設定できます。このようにして、複雑な浮動小数点数を分析するときに、制御できる精度を高めることができます。
実際、コンテキスト内のrounding=ROUND_HALF_EVENパラメーターに注意を払うことができます。ROUND_HALF_EVEN、半分の場合、偶数に近い。
3.小数点と四捨五入について
小数について話すので、整数について話す必要があります。通常、これらの関数は丸めに使用されます。
1. round()
これは言うことではありません、それは前に言われました。これは単なる丸めではなく、ROUND_HALF_EVENの戦略であることに注意してください。
2.数学モジュールのceil(x)
x以上の最小の整数を取ります。
3.数学モジュールのfloor(x)
x以下の最大の整数に移動します。
>>> from math import ceil, floor
>>> round(2.5)
2
>>> ceil(2.5)
3
>>> floor(2.5)
2
>>> round(2.3)
2
>>> ceil(2.3)
3
>>> floor(2.3)
2
>>>