このAPIを構築しています。データベースには、次のいずれかを表す値が格納されます。
正直に言って、範囲が0から100%の間の数値を表現する方法がわかりません。それは
そのための明確な選択肢はありますか?データベースで0から100%パーセントまでの何かを表すグローバルな方法は?さらに進んで、float型またはdecimal型の正しい型は何ですか?
ありがとうございました。
mysql> create table numbers (a decimal(10,2), b float);
mysql> insert into numbers values (100, 100);
mysql> select @a := (a/3), @b := (b/3), @a * 3, @b * 3 from numbers \G
*********************************************************************
@a := (a/3): 33.333333333
@b := (b/3): 33.333333333333
@a + @a + @a: 99.999999999000000000000000000000
@b + @b + @b: 100
小数は、この場合に行うべきことを正確に実行し、残りを切り捨てて、1/3の部分を失いました。
したがって、合計の場合は小数の方が適していますが、除算の場合は浮動小数点のほうが適しています。つまり、DECIMALを使用しても、いかなる方法でも「フェイルプルーフ演算」が行われることはありません。
これがお役に立てば幸いです。
Tsqlの場合:Float、0.0は0として格納され、小数点以下の桁を定義する必要はありません。 Float(4,2)と書く必要はありません。 Decimal、0.0は0.0として保存され、decimal(4,2)のように定義するオプションがあります。0.00〜1.00をお勧めします。これを行うことにより、100を掛けずにそのパーセントの値を計算でき、レポートしてからデータ型を設定できますMS Excelおよび0.5 -> 50%
のような他のプラットフォームビューと同じパーセントの列。
10進数:金融アプリケーションの場合、10進数型を使用することをお勧めします。高精度で丸め誤差を回避しやすいためです。
Double:Double型は、金額の処理を除いて、実際の値に最もよく使用されるデータ型です。
Float:処理能力に対する要求が非常に高いため、主にグラフィックライブラリで使用され、丸めエラーに耐えられる状況も使用されます。
Floatとdecimalの違いは精度です。 Decimalは、10進数形式の精度内で任意の数値を100%正確に表すことができますが、Floatはすべての数値を正確に表すことができません。
たとえば、10進数を使用します。財務関連の値とフロートを使用します。グラフィカル関連値
decimal
は正確な精度を維持するためのものなので、表示と同じ方法で保存する場合はdecimal(5,2)
の使用をお勧めします。 ( https://dev.mysql.com/doc/refman/8.0/en/fixed-point-types.html を参照)
浮動小数点値は概算値であり、正確な値として格納されていないため、比較でそれらを正確なものとして処理しようとすると、問題が発生する可能性があります。また、プラットフォームまたは実装の依存関係の影響を受けます。
( https://dev.mysql.com/doc/refman/8.0/en/floating-point-types.html )
SQLステートメントで記述された浮動小数点値は、内部的に表現された値と同じでない場合があります。
DECIMALカラムの場合、MySQLは65桁の10進数の精度で演算を実行します。これにより、最も一般的な不正確な問題が解決されます。
https://dev.mysql.com/doc/refman/8.0/en/problems-with-float.html