mysql の float 型は非常に奇妙です
3 つのフィールドがあるテーブル テストがあります。
uid、1、2、uid は int 型、自動インクリメント、1 つのフィールドは float (3, 2)、および2 つのフィールドは float(5,2) です。
ロジックによれば、1 つのフィールド、つまり最初の 3 桁と最後の 2 桁に 123.12 のような数値を挿入できます。
2 つのフィールドでは、最初の 5 桁と最後の 2 桁のビットを挿入できますが、テスト値 (null,123.12,12345.12) に
挿入を挿入しましたが、挿入は成功しました。データが異なります。これはなぜですか?
値 98.12 (最初の 2 桁と小数点 2 桁) を挿入する必要がある場合、このフィールドは float 型に設定する必要があります。 ?
------解決策----------------
1. MySQL の定義が間違っています。非標準構文の使用を許可します: FLOAT(M,D)、REAL(M,D)、または DOUBLE PRECISION(M,D)。ここで、「(M,D)」とは、小数点以下D桁の合計M桁の整数を表示する値を意味します。たとえば、FLOAT(7,4) として定義された列は、-999.9999 と表示される可能性があります。 MySQL は保存時に値を四捨五入するため、FLOAT(7,4) カラムに 999.00009 を挿入すると、おおよその結果は 999.0001 になります。
2. 精度要件がある場合は、
DECIMAL 型と NUMERIC 型は MySQL では同じ型とみなされます。これらは、通貨データなど、正確な精度が必要な値を保持するために使用されます。この型の列を宣言するときは、精度と位取りを指定できます (通常はそうします)。たとえば、
salary DECIMAL(5,2)
この例では、5 が精度、2 が位取りです。精度は値を保存できる桁数を示し、スケールは小数点以下の桁数を保存できます。
-----解決策---------正の数を制限する属性を設定する必要があります。
------解決策------------------