Python数値計算の基礎|整数と小数の扱い方

Python数値計算の基本的な使い方を初心者向けに解説。整数と小数の違い、演算子の種類、型変換、精度の問題まで、実例とともに詳しく紹介します。

Learning Next 運営
20 分で読めます

Python数値計算の基礎|整数と小数の扱い方

みなさん、Pythonで数値計算をするときに困ったことはありませんか?

「計算結果が思ったものと違う!」「整数と小数って何が違うの?」 こんな疑問を感じたことはないでしょうか?

実は、数値計算の基礎をしっかりと理解することで、こうした問題は解決できます。 この記事を読めば、Pythonの数値計算が得意になりますよ!

今回は、Python の数値計算について基礎から実践まで詳しく解説します。 一緒に数値計算をマスターしていきましょう。

Pythonの数値型って何?

Pythonには、いくつかの数値型があります。 まずは、それぞれの特徴を理解しましょう。

整数型(int)

整数型は、小数点がない数値のことです。

# 整数の例
age = 25
year = 2024
temperature = -5
print(type(age)) # <class 'int'>
print(type(year)) # <class 'int'>
print(type(temperature)) # <class 'int'>

この例では、年齢、年、気温を整数で表現しています。 type()関数で確認すると、全てint型と表示されます。

Pythonの整数は大きさに制限がないのが特徴です。 つまり、どんなに大きな数でも扱えるんです!

小数型(float)

小数型は、小数点を含む数値のことです。

# 小数の例
price = 1500.5
pi = 3.14159
height = 170.2
print(type(price)) # <class 'float'>
print(type(pi)) # <class 'float'>
print(type(height)) # <class 'float'>

価格、円周率、身長などを小数で表現しています。 小数点があることで、より精密な値を扱えます。

科学的記法での表現も可能です。

# 科学的記法
large_number = 1.5e6 # 1500000.0
small_number = 1.5e-3 # 0.0015
print(large_number) # 1500000.0
print(small_number) # 0.0015

1.5e6は「1.5×10の6乗」という意味です。 とても大きな数や小さな数を簡潔に表現できます。

複素数型(complex)

Pythonでは、複素数も扱えます。

# 複素数の例
complex_num = 3 + 4j
print(type(complex_num)) # <class 'complex'>
print(complex_num.real) # 3.0(実部)
print(complex_num.imag) # 4.0(虚部)

複素数は、工学計算や数学的な処理で使用されます。 普段あまり使わないかもしれませんが、覚えておくと便利です。

基本的な演算子

Pythonでは、様々な演算子を使って計算できます。

四則演算

まずは、基本的な四則演算から見てみましょう。

# 基本的な四則演算
a = 10
b = 3
print(a + b) # 13(足し算)
print(a - b) # 7(引き算)
print(a * b) # 30(掛け算)
print(a / b) # 3.333...(割り算)

割り算の結果に注目してください。 整数同士の計算でも、結果は小数になります。

これは初心者が驚くポイントの一つですね。 でも心配いりません!しっかりと理解していきましょう。

特殊な演算子

Pythonには、便利な特殊演算子があります。

a = 10
b = 3
# 整数除算(商のみ)
print(a // b) # 3
# 剰余(余り)
print(a % b) # 1
# べき乗
print(a ** b) # 1000(10の3乗)

//は「整数除算」と呼ばれ、商の部分だけを取得します。 %は「剰余演算子」で、割り算の余りを求めます。

**は「べき乗演算子」で、累乗計算ができます。 例えば、10 ** 3は「10の3乗」つまり1000になります。

演算子の優先順位

演算子には優先順位があります。

# 優先順位の例
result1 = 2 + 3 * 4
print(result1) # 14(3*4が先に計算される)
result2 = (2 + 3) * 4
print(result2) # 20(括弧が最優先)
# 複雑な式
result3 = 2 ** 3 + 4 * 5
print(result3) # 28(2**3=8, 4*5=20, 8+20=28)

掛け算は足し算より先に計算されます。 括弧を使うことで、計算の順序を明確にできます。

複雑な計算では、積極的に括弧を使うことをおすすめします!

型変換の仕組み

データ型の変換について理解しましょう。

自動型変換

Pythonでは、異なる数値型同士の計算で自動的に型変換が行われます。

# 整数と小数の計算
int_num = 10
float_num = 3.5
result = int_num + float_num
print(result) # 13.5
print(type(result)) # <class 'float'>
# 整数と整数の割り算
result2 = 10 / 3
print(result2) # 3.333...
print(type(result2)) # <class 'float'>

整数と小数を計算すると、結果は小数になります。 これは、より精度の高い型に自動変換されるためです。

整数同士の割り算も、結果は小数になることを覚えておきましょう。

明示的型変換

必要に応じて、明示的に型を変換できます。

# 小数を整数に変換
float_num = 3.7
int_num = int(float_num)
print(int_num) # 3(小数部分は切り捨て)
# 整数を小数に変換
int_num = 5
float_num = float(int_num)
print(float_num) # 5.0
# 文字列を数値に変換
str_num = "123"
int_num = int(str_num)
print(int_num) # 123
str_float = "3.14"
float_num = float(str_float)
print(float_num) # 3.14

int()関数で小数を整数に変換できます。 小数部分は切り捨てられることに注意しましょう。

文字列を数値に変換する機能は、ユーザー入力の処理でよく使われます。

型変換の注意点

型変換では、以下の点に注意が必要です。

# 小数を整数に変換(切り捨て)
print(int(3.9)) # 3(4にはならない)
print(int(-3.9)) # -3(-4にはならない)
# 文字列から数値への変換エラー
try:
invalid_num = int("abc")
except ValueError as e:
print(f"エラー: {e}")
# 四捨五入
import math
print(round(3.7)) # 4(四捨五入)
print(math.ceil(3.1)) # 4(切り上げ)
print(math.floor(3.9)) # 3(切り捨て)

小数を整数に変換するとき、四捨五入ではなく切り捨てになります。 四捨五入したい場合は、round()関数を使いましょう。

無効な文字列を数値に変換しようとすると、エラーが発生します。 実際のプログラムでは、エラーハンドリングが重要です。

小数の精度問題

コンピュータでの小数計算には、注意すべき点があります。

浮動小数点数の制限

小数を正確に表現できない場合があります。

# 小数の精度問題
result = 0.1 + 0.2
print(result) # 0.30000000000000004
# 比較での問題
print(0.1 + 0.2 == 0.3) # False

「0.1 + 0.2 = 0.3」という当たり前の計算でも、コンピュータでは正確な結果になりません。 これは、浮動小数点数の内部表現に起因する問題です。

この問題は、プログラミング初心者が最も驚く現象の一つですね。

精度問題の対処法

精度が重要な計算では、以下の方法を使用します。

import decimal
from decimal import Decimal
# decimalモジュールを使用
decimal.getcontext().prec = 10 # 精度を設定
a = Decimal('0.1')
b = Decimal('0.2')
result = a + b
print(result) # 0.3
# 比較での使用
print(result == Decimal('0.3')) # True

decimalモジュールを使うことで、正確な小数計算ができます。 金融計算など、精度が重要な場面では必須の知識です。

近似比較

小数の比較では、近似的な比較を行います。

import math
def is_close(a, b, tolerance=1e-9):
return abs(a - b) < tolerance
# 使用例
result = 0.1 + 0.2
print(is_close(result, 0.3)) # True
# 標準ライブラリの使用
print(math.isclose(0.1 + 0.2, 0.3)) # True

math.isclose()関数を使うことで、小数の比較が簡単にできます。 この方法を使えば、精度問題を回避できます。

実践的な数値計算

実際のプログラムで使える数値計算の例を紹介します。

統計計算

基本的な統計計算をしてみましょう。

# 成績データの統計
scores = [85, 92, 78, 95, 88, 76, 90]
# 平均値
average = sum(scores) / len(scores)
print(f"平均点: {average:.2f}")
# 最高点・最低点
max_score = max(scores)
min_score = min(scores)
print(f"最高点: {max_score}, 最低点: {min_score}")
# 範囲
score_range = max_score - min_score
print(f"点数の範囲: {score_range}")

実行結果はこちらです。

平均点: 86.29 最高点: 95, 最低点: 76 点数の範囲: 19

sum()関数でリストの合計を求め、len()関数で要素数を取得しています。 :.2fの書式指定で、小数点以下2桁まで表示しています。

金融計算

お金に関する計算をしてみましょう。

# 複利計算
principal = 1000000 # 元本
rate = 0.03 # 年利3%
years = 5 # 5年間
# 複利計算
final_amount = principal * (1 + rate) ** years
print(f"元本: {principal:,}円")
print(f"5年後: {final_amount:,.0f}円")
# 利息
interest = final_amount - principal
print(f"利息: {interest:,.0f}円")

実行結果はこちらです。

元本: 1,000,000円 5年後: 1,159,274円 利息: 159,274円

複利計算の公式は「元本 × (1 + 金利)^年数」です。 {:,}の書式指定で、数値にカンマを入れて読みやすくしています。

単位変換

温度や距離の単位変換をしてみましょう。

# 温度変換
def celsius_to_fahrenheit(celsius):
return celsius * 9/5 + 32
def fahrenheit_to_celsius(fahrenheit):
return (fahrenheit - 32) * 5/9
# 使用例
celsius = 25
fahrenheit = celsius_to_fahrenheit(celsius)
print(f"{celsius}°C = {fahrenheit}°F")
# 距離変換
def km_to_miles(km):
return km * 0.621371
def miles_to_km(miles):
return miles / 0.621371
# 使用例
km = 100
miles = km_to_miles(km)
print(f"{km}km = {miles:.2f}miles")

実行結果はこちらです。

25°C = 77.0°F 100km = 62.14miles

関数を作ることで、繰り返し使える変換ツールが作れます。 国際的なアプリケーションでは、このような変換が重要です。

数学関数の活用

より高度な計算をしてみましょう。

mathモジュール

標準ライブラリのmathモジュールを使って、高度な数学計算ができます。

import math
# 基本的な数学関数
print(math.sqrt(16)) # 4.0(平方根)
print(math.pow(2, 3)) # 8.0(べき乗)
print(math.factorial(5)) # 120(階乗)
# 三角関数
print(math.sin(math.pi/2)) # 1.0
print(math.cos(0)) # 1.0
print(math.tan(math.pi/4)) # 1.0
# 対数関数
print(math.log(math.e)) # 1.0(自然対数)
print(math.log10(100)) # 2.0(常用対数)

mathモジュールには、様々な数学関数が用意されています。 科学計算やエンジニアリングで重宝する機能です。

数学定数の利用

便利な数学定数も使えます。

import math
# 数学定数
print(f"円周率: {math.pi}")
print(f"自然対数の底: {math.e}")
print(f"無限大: {math.inf}")
# 円の面積計算
radius = 5
area = math.pi * radius ** 2
print(f"半径{radius}の円の面積: {area:.2f}")
# 円周の計算
circumference = 2 * math.pi * radius
print(f"半径{radius}の円の円周: {circumference:.2f}")

実行結果はこちらです。

円周率: 3.141592653589793 自然対数の底: 2.718281828459045 無限大: inf 半径5の円の面積: 78.54 半径5の円の円周: 31.42

円周率や自然対数の底など、よく使う定数が定義されています。 これらを使うことで、正確な計算ができます。

エラーハンドリング

数値計算でよく発生するエラーの対処法を学びましょう。

ゼロ除算エラー

ゼロで割るエラーの対処法です。

# ゼロ除算エラーの対処
def safe_divide(a, b):
try:
return a / b
except ZeroDivisionError:
print("ゼロで割ることはできません")
return None
# 使用例
result = safe_divide(10, 2)
print(result) # 5.0
result = safe_divide(10, 0)
print(result) # None(エラーメッセージも表示)

try-except文を使って、エラーを適切に処理しています。 実際のプログラムでは、このようなエラーハンドリングが重要です。

型エラー

型に関するエラーの対処法です。

# 型エラーの対処
def safe_calculation(a, b):
try:
# 数値型に変換を試行
num_a = float(a)
num_b = float(b)
return num_a + num_b
except (ValueError, TypeError):
print("数値に変換できません")
return None
# 使用例
print(safe_calculation("10", "20")) # 30.0
print(safe_calculation("abc", "def")) # None

文字列を数値に変換する際のエラーも、適切に処理できます。 ユーザー入力を扱うプログラムでは、必須の技術です。

実践的な計算プログラム

最後に、実用的な計算プログラムを作ってみましょう。

消費税計算

日常でよく使う消費税計算です。

def calculate_tax(price, tax_rate=0.1):
"""消費税を計算する関数"""
tax = price * tax_rate
total = price + tax
return tax, total
# 使用例
item_price = 1500
tax, total_price = calculate_tax(item_price)
print(f"商品価格: {item_price:,}円")
print(f"消費税: {tax:,.0f}円")
print(f"合計: {total_price:,.0f}円")

実行結果はこちらです。

商品価格: 1,500円 消費税: 150円 合計: 1,650円

関数に税率をデフォルト引数として設定しています。 税率が変わっても、簡単に対応できる設計です。

BMI計算

健康管理に役立つBMI計算です。

def calculate_bmi(weight, height):
"""BMIを計算する関数"""
bmi = weight / (height ** 2)
if bmi < 18.5:
category = "やせ"
elif bmi < 25:
category = "標準"
elif bmi < 30:
category = "肥満(1度)"
else:
category = "肥満(2度以上)"
return bmi, category
# 使用例
weight = 65 # kg
height = 1.70 # m
bmi, category = calculate_bmi(weight, height)
print(f"身長: {height}m, 体重: {weight}kg")
print(f"BMI: {bmi:.2f} ({category})")

実行結果はこちらです。

身長: 1.7m, 体重: 65kg BMI: 22.49 (標準)

BMI値の計算だけでなく、判定も合わせて行っています。 このように、計算結果を使った判定処理も重要な技術です。

まとめ

Python数値計算の基礎から実践的な応用まで、詳しく解説しました。

今回学んだポイント

  • 整数と小数の違いと特徴
  • 基本的な演算子の使い方
  • 型変換の仕組みと注意点
  • 小数の精度問題と対処法
  • 実践的な計算プログラムの作り方

数値計算は、プログラミングの基礎でありながら奥が深い分野です。 データ分析、科学計算、金融計算など、様々な場面で重要なスキルになります。

ぜひ今日から、様々な数値計算にチャレンジしてみてください! まずは基本的な四則演算から始めて、徐々に複雑な計算プログラムを作ってみましょう。

きっと、数値計算が得意になりますよ。

関連記事