| この記事の要点 |
|
一覧
| 演算子 | 意味 | 例 | 結果 |
|---|---|---|---|
+ | 加算 | 7 + 2 | 9 |
- | 減算 | 7 - 2 | 5 |
* | 乗算 | 7 * 2 | 14 |
/ | 除算(必ず float) | 7 / 2 | 3.5 |
// | 切り捨て除算 | 7 // 2 | 3 |
% | 剰余 | 7 % 2 | 1 |
** | べき乗 | 7 ** 2 | 49 |
負数での // と %
ここが他言語といちばん違うところです。Python の // は負の無限大方向へ切り捨て(床関数)、% の符号は右オペランドに合わせます。
print(7 // 2, 7 % 2) # 3 1
print(-7 // 2, -7 % 2) # -4 1 ← -3 ではなく -4、余りは正
print(7 // -2, 7 % -2) # -4 -1 ← 余りの符号は右側に合う
# 0 方向に丸めたいときは int() か math.trunc()
import math
print(int(-7 / 2), math.trunc(-7 / 2)) # -3 -3
# 商と余りを同時に得る
print(divmod(-7, 2)) # (-4, 1)
「a == (a // b) * b + (a % b) が常に成り立つ」という関係は保たれます。剰余が必ず非負になるので、循環インデックスの計算に負数を渡しても安全です。
days = ["月", "火", "水", "木", "金", "土", "日"]
print(days[-3 % 7]) # 金 ← 負のシフトでも例外にならない
int はオーバーフローしない
print(2 ** 100)
# 1267650600228229401496703205376
import sys
print(sys.maxsize) # プラットフォーム依存の目安値であって上限ではない
print(sys.maxsize + 1) # 問題なく計算できる
上限が無い代わりに、桁が増えるほど演算コストが上がります。速度が要る数値計算では numpy の固定幅整数を使いますが、そちらはオーバーフローで折り返す点に注意してください。
ゼロ除算
try:
1 / 0
except ZeroDivisionError as e:
print(e) # division by zero
try:
1 % 0
except ZeroDivisionError as e:
print(e) # integer modulo by zero
# float は inf にはならず、同じく例外
# ただし numpy は警告を出して inf / nan を返す(挙動が違う)
浮動小数の誤差
print(0.1 + 0.2) # 0.30000000000000004
print(0.1 + 0.2 == 0.3) # False
import math
print(math.isclose(0.1 + 0.2, 0.3)) # True ← 比較はこれ
from decimal import Decimal
print(Decimal("0.1") + Decimal("0.2")) # 0.3 ← 金額計算はこちら
from fractions import Fraction
print(Fraction(1, 3) + Fraction(1, 6)) # 1/2
Decimal は文字列から作るのが要点です。Decimal(0.1) と書くと float の誤差をそのまま取り込んでしまいます。
丸めの注意
print(round(0.5), round(1.5), round(2.5)) # 0 2 2
# Python の round は「偶数丸め(銀行家の丸め)」。四捨五入ではない
from decimal import Decimal, ROUND_HALF_UP
print(Decimal("2.5").quantize(Decimal("1"), rounding=ROUND_HALF_UP)) # 3
関連
- 演算子 — 親カテゴリ
- 代入演算子 —
+=などの複合代入 - 比較演算子 — float の比較
- round / math モジュール
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38