Python

【Python】数値を扱うデータ型

この記事では、Pythonで数値を扱うデータ型について解説します。

Pythonには、整数を扱うためのint型、浮動小数点数を扱うためのfloat型、複素数を扱うためのcomplex型などが用意されています。

数値を扱うデータ型をまとめて「数値型」と呼んだりします

それでは、Pythonの数値型について見ていきましょう❗️

数値を扱うデータ型

Pythonで主に使用する数値型には、以下のようなものがあります。

int型 整数を扱うためのデータ型。
float型 浮動小数点数を扱うためのデータ型。
complex型 複素数を扱うためのデータ型。

int型(整数)

int型は、integer(整数)の略で整数を扱うための型です。

有効桁数

Python 2のint型は、C言語のlongを使って実装されているので32ビットの精度があります。また、int型の他に有効桁数が設けられていないlong型がありました。

Python 3のint型には、有効桁数が設けられておらず、整数型はint型しかありません。

整数リテラル

小数点や指数表記を含まない数値リテラルは整数として扱われます。

print(1)
print(type(1))

実行結果

1
<class 'int'>

もちろん、変数に代入することもできる。

n = 10

print(n)
print(type(n))

実行結果

10
<class 'int'>

float型(浮動小数点数)

float型は、「floating point number」の略で浮動小数点数を扱うための型です。

有効桁数

float型は、基本的にC言語の倍精度浮動小数点数doubleを使って実装されています。なので、精度はdoubleと同じ64ビットです。

また、sys.float_infoから精度などを確認することができます。

import sys

print(sys.float_info)

実行結果

sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)

浮動小数点数リテラル

小数点や指数表記を含む数値リテラルは、浮動小数点として扱われます。

print(1.0)
print(type(1.0))

実行結果

1.0
<class 'float'>

変数に代入することもできる。

pi = 3.14

print(pi)
print(type(pi))

実行結果

3.14
<class 'float'>

complex型(複素数)

complex型は、「Complex number」の略で複素数を扱うための型です。

複素数リテラル

数値リテラルにj、またはJを付けることで実部が0の虚数として扱われます。

print(1j)
print(type(1j))

実行結果

1j
<class 'complex'>

整数や浮動小数点数を加えることで実部を表現することができる。

print(2 + 1j)
print(type(2 + 1j))

実行結果

(2+1j)
<class 'complex'>

アクセス

実部をreal、虚部をimagからアクセスできます。

c = 2 + 1j

print(f'{c} = 実部: {c.real}, 虚部: {c.imag}')

実行結果

(2+1j) = 実部: 2.0, 虚部: 1.0

特殊な数値型

この他にもPythonには便利な数値型が用意されています。

decimal型(正確な10進数)

decimal型は、10進数を正確に表現できる型です。コンピュータは、2進数を使って10進数を表現しているので、ちょくちょく値にブレが生じてしまいます。なので、正確に10進数を表現したい場合には、decimal型を使います。

from decimal import Decimal

# floatを使った演算
print(1.1 + 2.2)

# decimalを使った演算
print(Decimal('1.1') + Decimal('2.2'))

実行結果

3.3000000000000003
3.3

Linkdecimal --- 十進固定及び浮動小数点数の算術演算

Fraction型(分数)

Fraction型は、分数を扱える型となっています。

from fractions import Fraction

print(Fraction(40, -3))     # -40/3
print(Fraction('18/12'))    # 3/2
print(Fraction(1.1))        # 2476979795053773/2251799813685248

from decimal import Decimal

print(Fraction(Decimal('1.1')))  # 11/10

Linkfractions --- 有理数

数値型の生成と変換

文字列などの他のデータ型の値から数値型を生成することができます。また、整数から浮動小数点数に変換したり、浮動小数点数を整数に変換することもできます。

任意のオブジェクトを型変換(キャスト)する方法

int型の生成と変換

int型のオブジェクトを生成するには、int型のコンストラクタint()を使います。

s = '123'
f = 3.14
c = 1+2j

i = int(s)
print(i, type(i))  # 123 <class 'int'>

i = int(f)
print(i, type(i))  # 3 <class 'int'>

i = int(c)
print(i, type(i))  # TypeError: can't convert complex to int
浮動小数点数から整数を生成すると小数部分は必ず切り捨てられます

float型の生成と変換

float型のオブジェクトを生成するには、float型のコンストラクタfloat()を使います。

s = '3.14'
i = 1
c = 1+2j

f = float(s)
print(f, type(f))  # 3.14 <class 'float'>

f = float(i)
print(f, type(f))  # 1.0 <class 'float'>

f = float(c)
print(f, type(f))  # TypeError: can't convert complex to float

complex型の生成と変換

complex型のオブジェクトを生成するには、complex型のコンストラクタcomplex()を使います。

s = '1+2j'
i = 1
f = 3.14

c = complex(s)
print(c, type(c))  # (1+2j) <class 'complex'>

c = complex(i)
print(c, type(c))  # (1+0j) <class 'complex'>

c = complex(f)
print(c, type(c))  # (3.14+0j) <class 'complex'>

# 第二引数で虚部を指定することもできる
c = complex(i, f)
print(c, type(c))  # (1+3.14j) <class 'complex'>

まとめ

この記事では、Pythonの数値型について解説しました。

難しい内容はなかったと思いますが、覚えることが多かったので忘れてしまったら読み返して徐々に慣れていってください。

数値型は演算することもできます。演算については以下の記事を参照してください。

数値型の演算と演算子一覧

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ