私は楽しみのために作成していますが、いまだに真剣にアプローチしたいと考えています。さまざまなテストをホストするサイトです。これらのテストにより、統計データを収集したいと考えています。
一部のデータには、タイミングを合わせたテストの完全性の割合が含まれます。テストの割合を簡単に計算できますが、完了時にテストに関するさまざまな値を保存するときに真のデータが返されるようにします。
ほとんどの値はPHP floatであるため、本当の統計データが必要な場合、MYSQLにFLOAT、DOUBLE、またはDECIMALとして保存する必要があります。
AVG()
だけでなく、LOG10()
やTRUNCATE()
などのMYSQLの関数を利用したいと思います。 MYSQLが挿入した値に基づいて真のデータを返すようにするには、データベース列の選択として何を使用する必要があります。
いくつかの数値は、10、10.89、99.09、または単に0などの浮動小数点数である場合とそうでない場合があるため、お願いします。しかし、真の有効な統計データを返したいと思います。
これには浮動小数点演算を使用できますか?
編集
これは一般的な質問であり、広く謝罪しますが、自分のような非数学者にとっても、MYSQLの専門家でもないので、この分野の専門家の意見をお願いします。
私は研究をしましたが、それでも私はこの問題に関して判断が曇っていると感じています。繰り返しますが、私の質問がトピックから外れているか、このサイトに適していない場合は謝罪します。
この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が最適なオプションになります。
10進数データ(つまり、通貨)を保存する場合を除き、標準の浮動小数点型(FLOATまたはDOUBLE)を使用する必要があります。 DECIMALは固定小数点型であるため、SUMなどの計算時にオーバーフローする可能性があり、LOG10の場合はとてつもなく不正確になります。
バイナリ浮動小数点型については「それほど正確ではない」というものはありません。実際、ニーズに対してはるかに正確(かつ高速)になります。ダブルで行く。
簡単に言えば、Floatとdoubleは10進数ほど正確ではありません。通貨関連の数値入力には小数が推奨されます(通貨と給与)。もう1つ指摘する必要があるのは、「=」、「<>」を使用して浮動小数点数を比較しないでください。浮動小数点数は正確ではないためです。
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桁に四捨五入)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が写真を撮ろうとした場合に役立つと思った。間違っている場合は修正してください。古いドキュメントを読んでいないことを願っています:)
FloatおよびDoubleは浮動小数点データ型です。つまり、格納する数値は特定の桁数まで正確になります。たとえば、7.6543219
を保存する場合、float型の列を持つテーブルの場合、7.65432
として保存されます。同様に、Double
データ型は値を概算しますが、Float
よりも精度が高くなります。
Decimal
データ型の列を持つテーブルを作成する場合、格納する合計桁数と10進数の後の桁数を指定します。格納する数値が指定した範囲内にある場合は、正確に格納されます。
正確な値を保存する場合、Decimal
を使用する方法があります。これは固定データ型として知られています。