web-dev-qa-db-ja.com

統計データを保存するには、DECIMAL、FLOAT、またはDOUBLEが必要ですか?

私は楽しみのために作成していますが、いまだに真剣にアプローチしたいと考えています。さまざまなテストをホストするサイトです。これらのテストにより、統計データを収集したいと考えています。

一部のデータには、タイミングを合わせたテストの完全性の割合が含まれます。テストの割合を簡単に計算できますが、完了時にテストに関するさまざまな値を保存するときに真のデータが返されるようにします。

ほとんどの値はPHP floatであるため、本当の統計データが必要な場合、MYSQLにFLOAT、DOUBLE、またはDECIMALとして保存する必要があります。

AVG()だけでなく、LOG10()TRUNCATE()などのMYSQLの関数を利用したいと思います。 MYSQLが挿入した値に基づいて真のデータを返すようにするには、データベース列の選択として何を使用する必要があります。

いくつかの数値は、10、10.89、99.09、または単に0などの浮動小数点数である場合とそうでない場合があるため、お願いします。しかし、真の有効な統計データを返したいと思います。

これには浮動小数点演算を使用できますか?

編集

これは一般的な質問であり、広く謝罪しますが、自分のような非数学者にとっても、MYSQLの専門家でもないので、この分野の専門家の意見をお願いします。

私は研究をしましたが、それでも私はこの問題に関して判断が曇っていると感じています。繰り返しますが、私の質問がトピックから外れているか、このサイトに適していない場合は謝罪します。

63
PEPLOVE

このlinkは、探しているものを説明するのに適しています。ここに言うことがあります:

これら3つのタイプはすべて、次のパラメーター(サイズ、d)で指定できます。ここで、sizeは文字列の合計サイズで、dは精度を表します。たとえば、1234.567のような数値を格納するには、DatatypeをDOUBLE(7、3)に設定します。7は総桁数で、3は小数点以下の桁数です。

FLOATとDOUBLE、両方とも浮動小数点数を表します。 FLOATは単精度用であり、DOUBLEは倍精度数用です。 0〜23の精度は、4バイトの単精度FLOAT列になります。 24〜53の精度は、8バイトの倍精度DOUBLE列になります。 FLOATの精度は小数点以下約7桁で、最大14倍です。

Decimalの宣言と機能はDoubleに似ています。ただし、浮動小数点値と10進数(数値)値には大きな違いが1つあります。 DECIMALデータ型を使用して正確な数値を格納します。正確ではなく、正確で正確な値が必要です。 Decimalタイプは、小数点以下30桁で最大65桁を格納できます。

したがって、最も正確で正確な値を得るには、Decimalが最適なオプションになります。

78
Linger

10進数データ(つまり、通貨)を保存する場合を除き、標準の浮動小数点型(FLOATまたはDOUBLE)を使用する必要があります。 DECIMALは固定小数点型であるため、SUMなどの計算時にオーバーフローする可能性があり、LOG10の場合はとてつもなく不正確になります。

バイナリ浮動小数点型については「それほど正確ではない」というものはありません。実際、ニーズに対してはるかに正確(かつ高速)になります。ダブルで行く。

6
Simon Byrne

簡単に言えば、Floatとdoubleは10進数ほど正確ではありません。通貨関連の数値入力には小数が推奨されます(通貨と給与)。もう1つ指摘する必要があるのは、「=」、「<>」を使用して浮動小数点数を比較しないでください。浮動小数点数は正確ではないためです。

5
waterinusa

10進数:固定小数点型(Exact値)。お金のように正確な精度が必要な場合に使用します。

例:salary DECIMAL(8,2)、8は総桁数、2は小数点以下の桁数です。 salary-999999.99から999999.99の範囲になります


Float、Double:浮動小数点型(近似値値)。 Floatは4バイトを使用して値を表し、Doubleは8バイトを使用して値を表します。

例:percentage FLOAT(5,2)、10進型と同じ、5は合計桁数、2は小数点以下桁数です。 percentageは、-999.99から999.99までの値を保存します。

approximate valueであることに注意してください。この場合:

  • 1 / 3.0 = 0.3333333...のような値は0.33(小数点以下2桁)として保存されます
  • 33.009のような値は33.01として保存されます(小数点以下2桁に四捨五入)
3
Timeless

Linger:あなたが言及し引用するウェブサイトには、IMOが不正確な情報を含んでいるので、私は混乱しました。ドキュメントでは、floatまたはdoubleを宣言するときに、実際には小数点に数字が含まれていないことを読みました。したがって、文字列内の文字数ではなく、すべての数字が使用されます。

「DOUBLE PRECISION(M、D)..」を比較してください。ここで、「(M、D)」は、合計で最大M桁の値を格納できることを意味します。 、FLOAT(7,4)として定義された列は、表示されると-999.9999のようになります」 http://dev.mysql.com/doc/refman/5.1/en/floating-point-types.html =

また、誤解を招くような命名法-文書によると、Mは「精度」、Dは「スケール」ですが、Webサイトは「精度」を「スケール」にします。

私のようなsbが写真を撮ろうとした場合に役立つと思った。間違っている場合は修正してください。古いドキュメントを読んでいないことを願っています:)

1
Joey

FloatおよびDoubleは浮動小数点データ型です。つまり、格納する数値は特定の桁数まで正確になります。たとえば、7.6543219を保存する場合、float型の列を持つテーブルの場合、7.65432として保存されます。同様に、Doubleデータ型は値を概算しますが、Floatよりも精度が高くなります。

Decimalデータ型の列を持つテーブルを作成する場合、格納する合計桁数と10進数の後の桁数を指定します。格納する数値が指定した範囲内にある場合は、正確に格納されます。

正確な値を保存する場合、Decimalを使用する方法があります。これは固定データ型として知られています。

0
Daksh