.NETエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnet.NETナビ
  2. .NETコラム
  3. プログラミング言語
  4. Python
  5. Pythonでのdecimalモジュールの扱い方とは?演算誤差を防ぐためのdecimal

Pythonでのdecimalモジュールの扱い方とは?演算誤差を防ぐためのdecimal

  • Python
  • プログラミング言語
公開日時:   更新日時:
Pythonでのdecimalモジュールの扱い方とは?演算誤差を防ぐためのdecimal
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>

    システム
    エンジニア
    decimaiモジュールとはどんな機能なのでしょうか?

    プロジェクト
    マネージャー
    十進数の計算を行うためのモジュールです。実際に詳しくみていきましょう。

    Pythonでのdecimalモジュールの扱い方とは?


    今回は、Pythonでのdecimalモジュールの扱い方について説明します。

    小数点を扱う場合、float型を使用します。
    コンピュータは2進数で数値を扱うため、誤差が発生する場合があります。
    これを防ぐために、Pythonではdecimalモジュールが用意されています。

    ここでは、decimalモジュールの
    ・基本的な使い方
    ・演算
    ・FloatOperationのtrap
    ・精度の指定
    ・四捨五入(round)
    ・四捨五入(quantize)
    について紹介します。

    Pythonでのdecimalモジュールの扱い方に興味のある方はぜひご覧ください。

    基本的な使い方

    Pythonでのdecimalモジュールの基本的な使い方を紹介します。

    decimalモジュールを使用するにはimportが必要です。

    実際のソースコードを見てみましょう。

    実行結果は以下のようになります。

    float型で計算した場合は、誤差が生じています。
    一方、decimalモジュールで計算した場合、誤差が生じていません。
    Decimalクラスには、文字列を指定する必要があります。

    このようにdecimalモジュールを使用します。

    演算

    Pythonでのdecimalモジュールを使った演算について紹介します。

    実際のソースコードを見てみましょう。

    実行結果は以下のようになります。

    このように、誤差なく加減乗除の演算ができます。

    FloatOperationのtrap

    Decimalクラスには、文字列を指定する必要があります。
    数値を指定してもエラーにはなりません。
    演算結果はどのようになるのでしょうか。

    実際のソースコードを見てみましょう。

    実行結果は以下のようになります。

    数値で指定すると、誤差が生じていることが分かります。

    間違って数値で指定することを防ぐために、FloatOperationのtrapを有効にする方法があります。
    実際のソースコードを見てみましょう。

    実行結果は以下のようになります。

    Decimalをfloatで初期化したり、Decimalをfloatで計算すると、実行時エラーが発生します。
    このように、PythonではFloatOperationのtrapを有効にすることで、意図しない初期化や演算を防げます。

    精度の指定

    Pythonでのdecimalモジュールを使った、精度を指定した演算について紹介します。

    実際のソースコードを見てみましょう。

    実行結果は以下のようになります。

    「getcontext().prec」で精度を指定することで、演算結果が指定精度で出力されていることが分かります。
    このように、Pythonでは精度を指定した演算ができます。

    四捨五入(round)

    Pythonでのdecimalモジュールを使った丸めについて紹介します。
    組み込み関数のroundメソッドを使用します。

    実際のソースコードを見てみましょう。

    実行結果は以下のようになります。

    小数を任意の桁数で四捨五入したり、整数を任意の桁数で四捨五入したりできます。
    このように、組み込み関数のroundメソッドで四捨五入できます。

    四捨五入(quantize)

    Pythonでのdecimalモジュールを使った丸めについて、もう一つの方法を紹介します。
    decimal標準ライブラリのquantizeメソッドを使用します。

    実際のソースコードを見てみましょう。

    実行結果は以下のようになります。

    整数部の四捨五入は少し特殊です。
    このように、Pythonではquantizeメソッドで四捨五入できます。

    システム
    エンジニア
    精度を指定できるということは、小数点も定義できるいうことでしょうか?

    プロジェクト
    マネージャー
    そうです。文字列として定義することで誤差の発生も防ぐことができます。

    まとめ

    Pythonでのdecimalモジュールの扱い方について説明しました。
    基本的な使い方だけでなく、演算精度の指定方法や四捨五入の方法なども紹介しました。
    ぜひご自身でソースコードを書いて、理解を深めてください。

    FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    新着案件New Job