浮動小数点数がどのような値の近似値なのか確認するPythonのスクリプトを、ご紹介しました。
Decimal型の小数ならば近似値ではないことも、あわせて確認しておくと良さそうです。
Decimalの整数を10で割り算した小数値を確認するサンプル
「0.1」から「0.9」までの、「0.1」ごとのDecimal型の小数がどのような値なのか、小数点以下16桁・17桁・18桁までを出力してみます。
for i in range(1, 10):
x = decimal.Decimal(i) / decimal.Decimal(10)
print(f'{x:.16f}', f'{x:.17f}', f'{x:.18f}')
PythonでDecimal型を利用するには、decimalモジュールが必要であるため、最初にimportを行っています。
import decimal
カウンター変数iが、1から9になるまでfor文を回して、
for i in range(1, 10):
Decimal型に変換した変数iを、10で割り算して得られた小数を変数xに代入し、
x = decimal.Decimal(i) / decimal.Decimal(10)
小数点以下16桁・17桁・18桁までf-stringを使って出力しています。
print(f'{x:.16f}', f'{x:.17f}', f'{x:.18f}')
結果は以下のとおりです。
0.1000000000000000 0.10000000000000000 0.100000000000000000 0.2000000000000000 0.20000000000000000 0.200000000000000000 0.3000000000000000 0.30000000000000000 0.300000000000000000 0.4000000000000000 0.40000000000000000 0.400000000000000000 0.5000000000000000 0.50000000000000000 0.500000000000000000 0.6000000000000000 0.60000000000000000 0.600000000000000000 0.7000000000000000 0.70000000000000000 0.700000000000000000 0.8000000000000000 0.80000000000000000 0.800000000000000000 0.9000000000000000 0.90000000000000000 0.900000000000000000
文字列としての小数をDecimalに変換して確認するサンプル
文字列としての小数をDecimal型に変換した場合も、念のために確認しましょうか。
for i in range(1, 10):
x = decimal.Decimal('0.' + str(i))
print(f'{x:.16f}', f'{x:.17f}', f'{x:.18f}')
先ほどのスクリプトとの違いは、変数xに代入する値の作成方法です。
先ほどは、割り算をしていましたが、
x = decimal.Decimal(i) / decimal.Decimal(10)
こちらのスクリプトでは、文字列の「0.1」「0.2」「0.3」といった数字を作成して、Decimal型に変換しています。
x = decimal.Decimal('0.' + str(i))
もちろん出力結果は同じです。
0.1000000000000000 0.10000000000000000 0.100000000000000000 0.2000000000000000 0.20000000000000000 0.200000000000000000 0.3000000000000000 0.30000000000000000 0.300000000000000000 0.4000000000000000 0.40000000000000000 0.400000000000000000 0.5000000000000000 0.50000000000000000 0.500000000000000000 0.6000000000000000 0.60000000000000000 0.600000000000000000 0.7000000000000000 0.70000000000000000 0.700000000000000000 0.8000000000000000 0.80000000000000000 0.800000000000000000 0.9000000000000000 0.90000000000000000 0.900000000000000000
最終更新日時:2021-06-25 06:21
- Newer:VBAで目盛ラベル・TickLabelsのフォントサイズを
- Older:VBAで楕円・Ovalsを非表示に