🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

7096閲覧

「FloatField」と「DecimalField」の違いについて

ruuuu

総合スコア176

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/02/02 10:49

編集2021/02/02 10:49

Djangoのモデルフィールドを調べていた際にQiitaの記事を見つけたのですが、少々疑問な点がありました。
少数を表す為にはFloatFieldDecimalFieldの2つがあるのですが、こちら2つはどのような違いがあるのでしょうか...?
格納する数字の大きさによって、使い分けるような形でしょうか...?
どなたか、ご助言頂けましたら幸いです

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruuuu

2021/02/02 11:12

>https://docs.djangoproject.com/en/3.1/ref/models/fields/ こちら確認してみました。 以下のように記載されていたということは、内部的にfloat 型もしくはDecimal 型を使われているかの違いということですね 「FloatField クラスは、DecimalField クラスと混同されることがあります。両方とも実数を表しますが、異なる方法で表現しています。FloatField は内部的には Python の float 型を使い、DecimalField は Python の Decimal 型を使います。この 2 つの違いについては、 Python のドキュメント decimal module を参照してください。」
m.ts10806

2021/02/02 11:20

こちらの指摘の意図は「質問前に確認すべきものを確認しているか」です。 誰でもアクセスできる開かれたドキュメントです。 どんな言語でも公式ドキュメントを確認せずにプログラミングは、ありえません(活用できない人はずっと初心者から抜け出せないと思ってください)
guest

回答2

0

物理や化学などの一般的な数値計算ではfloatを使います。
お金の計算(銀行等)ではdecimalを使います。

昔はdecimalはハードウェアのBCD命令を使っていました。最近はソフトで実現しているようです。

floatを使うと以下のようになります。

python

1>>> x = 1.3 2>>> y = 1.6 3>>> z = x + y 4>>> print(z) 52.9000000000000004

科学技術計算ではこれで十分です。
銀行の利子とかを計算するときに誤差が出ると大問題ですので、そういう場合はdecimalを使います。

python

1>>> import decimal 2>>> x = decimal.Decimal("1.3") 3>>> y = decimal.Decimal("1.6") 4>>> z = x + y 5>>> print(z) 62.9

投稿2021/02/02 12:35

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruuuu

2021/02/02 17:03 編集

ご回答ありがとうございます。 > 物理や化学などの一般的な数値計算ではfloatを使います。 こちらの部分で少々お聞きしたいことがあるのですが、float型を使用した場合、「2.9000000000000004」こちらのようになってしまうのであれば、通常の計算でもdecimal型を使用した方が良いのではないかと思うのですが、float型を使用した方が良いメリットなどはありますでしょうか...?
ppaul

2021/02/02 23:16

decimal型は、 ・実行速度が遅い。 ・計算の消費エネルギーが大きく熱を出す。 ・絶対値が大きい数や小さい数を表現できない。 ・指数関数、対数関数、sinなどの三角関数などがない。(作るメリットがないので誰も作らない) などのデメリットがいっぱいあります。 floatで誤差があるというのは、十進法を使っている人間から見た誤差であって、二進法で動いているコンピュータからすれば、decimal型のほうに誤差があります。 (1.0 ÷ 3.0) × 3.0 のような計算では、少数以下1桁のdecimal型では0.1の誤差が出ますがfloat型なら誤差はでません。 このため、「人間から見た誤差が少ないように見えることが重要な金融関係業務」以外でdecimal型が使われることはほどんどありません。
ruuuu

2021/02/03 01:35 編集

ありがとうございます。 > (1.0 ÷ 3.0) × 3.0 のような計算では、少数以下1桁のdecimal型では0.1の誤差が出ますが こちら、お金の計算では0.1以下を表すことはないですし、それを考えるとdecimal型の方が良いということなのですね
guest

0

自己解決

Djangoドキュメントの「FloatField と DecimalField の比較」項目にて、以下のように違いが記述されていました。

FloatField クラスは、DecimalField クラスと混同されることがあります。両方とも実数を表しますが、異なる方法で表現しています。FloatField は内部的には Python の float 型を使い、DecimalField は Python の Decimal 型を使います。この 2 つの違いについては、 Python のドキュメント decimal module を参照してください。

投稿2021/02/02 11:18

編集2021/02/02 11:19
ruuuu

総合スコア176

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問