Pythonのdecimalモジュール
を使って、小数点の丸めを行っていきます。
丸めには、Decimalオブジェクトの quantize() 関数を使います。
スポンサーリンク
quantize() 関数の使い方
小数点以下を切り上げる例です。
# coding: utf-8
from decimal import *
Decimal(str("1.5")).quantize(Decimal('0'), rounding=ROUND_UP)
#-> 2
quantize()は、第一引数で丸めを行う小数点桁数、第二引数で丸めオプションを指定します。
この引数について、以降に詳しく解説していきます。
小数を任意の桁数で丸める
quantize()
の第一引数に、丸める桁数と同じ少数点桁数の数値を、'0.1'
や'0.01'
のように文字列で指定します。
- 少数点第二位で丸める
Decimal(str("1.25")).quantize(Decimal('0.1'), rounding=ROUND_UP)
#=> 1.3
- 整数1の位を丸める
少数だけでなく、整数も丸める事が出来ます。
但し、整数で丸める場合は、指数表記の文字列で指定する必要があります。
Decimal(str("15.00")).quantize(Decimal('1E1'), rounding=ROUND_UP)
#=> 2E+1
スポンサーリンク
丸めオプションを指定する
quantize()
の第二引数には、丸めオプションを指定します。
指定可能なオプションは、以下のいずれかです。
- ROUND_CEILING
正の無限大に近づくように丸めるモードです。
value.quantize(Decimal('0'), rounding=ROUND_CEILING)
# 10.1 -> 11
# 10.5 -> 11
# -10.1 -> -10
# -10.5 -> -10
- ROUND_DOWN
0 に近づくように丸めるモードです。(切り捨て)
value.quantize(Decimal('0'), rounding=ROUND_DOWN)
# 10.1 -> 10
# 10.5 -> 10
# -10.1 -> -10
# -10.5 -> -10
- ROUND_FLOOR
負の無限大に近づくように丸めるモードです。
value.quantize(Decimal('0'), rounding=ROUND_FLOOR)
# 10.1 -> 10
# 10.5 -> 10
# -10.1 -> -11
# -10.5 -> -11
- ROUND_HALF_DOWN
「もっとも近い数字」に丸めるモードです。(五捨六入)
value.quantize(Decimal('0'), rounding=ROUND_HALF_DOWN)
# 10.1 -> 10
# 10.5 -> 10
# 10.6 -> 11
# -10.1 -> -10
# -10.5 -> -10
# -10.6 -> -11
- ROUND_HALF_EVEN
「もっとも近い数字」に丸める丸めモードです。
※両隣りの数字が等距離の場合は偶数側に丸められます
value.quantize(Decimal('0'), rounding=ROUND_HALF_EVEN)
# 10.1 -> 10
# 10.5 -> 10
# 10.6 -> 11
# 11.1 -> 11
# 11.5 -> 12
# 11.6 -> 12
- ROUND_HALF_UP
「もっとも近い数字」に丸める丸めモードです(四捨五入)
※両隣りの数字が等距離の場合は切り上げられます
value.quantize(Decimal('0'), rounding=ROUND_HALF_UP)
# 10.1 -> 10
# 10.5 -> 11
# 10.6 -> 11
# 11.1 -> 11
# 11.5 -> 12
# 11.6 -> 12
- ROUND_UP
0 から離れるように丸めるモードです。(切り上げ)
value.quantize(Decimal('0'), rounding=ROUND_UP)
# 10.1 -> 11
# 10.5 -> 11
# 10.6 -> 11
# 11.1 -> 12
# 11.5 -> 12
# 11.6 -> 12
- ROUND_05UP
少し変わった丸めです。
0に近づくように丸め(切り捨て)た結果の最後の数字が 0 または 5 の場合、0から離れる丸め(切り上げ)を行います。
例えば「0.54」を小数点第二位で、切り捨てした場合、結果は「0.5」になります。
この時、最後の数字が「5」になる為、ROUND_05UP
では元の数字の「0.54」を切り上げを行い、その結果を、最終的な丸め結果として返します。
実際に試した結果は以下の通りです。
value.quantize(Decimal('0'), rounding=ROUND_05UP)
# 0.51 -> 0.6
# 0.55 -> 0.6
# 0.61 -> 0.6
# 0.65 -> 0.6
# 0.01 -> 0.1
# 0.06 -> 0.1
スポンサーリンク
関連記事
■ MacにPython3をインストールする! (サクッとインストールしたい人向け)
Mac環境に、Python3を簡単にインストールする方法を紹介しています。
■ Python3入門! 基礎をおさらい (変数/演算子/条件分岐/繰り返し)
1つの記事に、基本文法をまとめて書いているので、時間が空いて忘れてしまった場合でも、一気に復習出来るようになっています。よければ見てください。
■ Flaskでソースの変更を検知して、Webアプリを自動リロードする[Python Tips]
Flaskの開発で、ソースを更新したら、自動的にWebアプリをリロードする方法です。
■ Flaskで REST API開発する! 直ぐに実行できるサンプルコードで解説 【Python Tips】
Pythonの軽量Webフレームワークである、FlaskでREST APIを作るまでの流れを、紹介します。
■ Flask-RESTful を使って、REST APIを作る【Python Tips】
Flaskと、Flask-RESTfulを使って、REST APIを作ります。
Flask-RESTfulを使うと、オブジェクト思考な感じで、REST APIが作れます。
■ Pythonで正規表現を使って数値/英字チェックを実装する (コピペ用)
数値/半角英字などのチェック処理を、Pythonの正規表現を使って実装します。
コピペで簡単に使えるようになっています。
0 件のコメント:
コメントを投稿