ラウンド関数は非常に単純で、浮動小数点数を概算し、小数点以下数桁を保持します。といった
round(10.0/3,2)3.33round(20/7)3
最初のパラメーターは浮動小数点数であり、2番目のパラメーターは予約された小数点以下の桁数です。オプションで、書き込まれない場合、デフォルトで整数として予約されます。
このような単純な機能でどのような落とし穴がありますか?
1、 ラウンドの結果は、Pythonバージョンに関連しています
python2とpython3の違いを見てみましょう。
$ python
Python 2.7.8(default, Jun 182015,18:54:19)[GCC 4.9.1] on linux2
Type "help","copyright","credits" or "license"for more information.round(0.5)1.0
$ python3
Python 3.4.3(default, Oct 142015,20:28:29)[GCC 4.8.4] on linux
Type "help","copyright","credits" or "license"for more information.round(0.5)
pythonのドキュメントを読むと、次のように書かれています。
python2.7のドキュメントでは、round()の終わりに、「値は10の最も近い倍数からn桁を引いたものに丸められます。2つの倍数が等しく近い場合、丸めは0から離れて行われます。」と記載されています。前の端に近い方の端に保ちます(6に丸められます)。距離が両端と同じである場合は、0から遠い側に保ちます。したがって、round(0.5)は約1になり、round(-0.5)は約-1になります。
しかし、python3.5のドキュメントでは、ドキュメントは「値は10の累乗からn桁を引いたものに最も近い倍数に丸められます。2つの倍数が等しく近い場合、丸めは偶数の選択に向けて行われます」になります。 、偶数側に予約されます。たとえば、round(0.5)とround(-0.5)は0に保持され、round(1.5)は2に保持されます。
したがって、py2からpy3に移行されるプロジェクトがある場合は、ラウンドに注意してください(もちろん、/と//、印刷、その他の代替ライブラリにも注意してください)。
**2、 特別な番号のラウンドの結果はあなたが望むものではないかもしれません。 ****
round(2.675,2)2.67
python2とpython3のドキュメントは両方とも同じ栗を引用しています。元のテキストは次のように述べています。
Note
The behavior of round() for floats can be surprising: for example, round(2.675, 2) gives 2.67 instead of the expected
2.68. This is not a bug: it’s a result of the fact that most decimal fractions can’t be represented exactly as a
float. See Floating Point Arithmetic: Issues and Limitations for more information.
簡単に言えば、round(2.675、2)の結果は、python2または3のどちらから見ても、結果は2.68になり、2.67になるはずです。なぜですか。これは、浮動小数点数の精度に関連しています。マシン内の浮動小数点数は、1と0の文字列に変換された後、無限の桁数になる可能性があり、マシンはすでに切り捨て処理を行っているため、正確に表現されない可能性があることがわかっています。その場合、マシンに格納されている2.675の数は、実際の数よりもわずかに小さくなります。この少しだけ2.67に少し近づくので、小数点以下2桁を保持すると2.67になります。
上記。正確さの要件がない限り、round()関数の使用は避けてください。概算計算には他のオプションがあります。
math.ceiling(天井分割)など、数学モジュールの一部の関数を使用します。
Pythonには独自の分割可能機能があり、python2は/、3は//であり、div関数もあります。
"%.2f"%値のように、文字列のフォーマットを切り捨てることができます(小数点以下2桁を保持し、文字列に変換します。..浮動小数点数を使用する場合は、float()を使用してください)。
もちろん、浮動小数点数の精度要件が非常に高い場合は、嘚瑟馍を使用してください。間違っているかどうかにかかわらず、decimalモジュールを使用してください。
コンテンツの拡張:
round(number,num_digits)
数値丸める数値。
Num_digitsで指定された桁数は、この数に応じて四捨五入されます。
注釈
例
x=1.343671234
print x
print round(x,1)
print round(x,2)
print round(x,3)
出力は次のとおりです。
1.343671234
1.3
1.34
1.344
これまで、pythonでround関数を使用する方法に関するこの記事を紹介しました。より関連性の高いPython round関数の使用法の概要コンテンツについては、ZaLou.Cnの以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後もZaLouをサポートしていただければ幸いです。 .Cn!
Recommended Posts