以下、いずれも MySQL のマニュアルを参考にしてください。
1 マニュアルの記述通りで、除算演算子の場合の有効桁数は、除数・被除数のうちの精度の高い方に、div_precision_increment の桁数を足した物になります。
2 マニュアルの記述より、DECIMAL 型の最大精度は (65, 30) です。ですので小数点以下30桁を超える場合は31桁目で四捨五入された値を利用します。
mysql> select cast(0.8999999999999999999999999999999 as decimal(65,30));
+-----------------------------------------------------------+
| cast(0.8999999999999999999999999999999 as decimal(65,30)) |
+-----------------------------------------------------------+
| 0.900000000000000000000000000000 |
+-----------------------------------------------------------+
1 row in set (0.00 sec)
3 0.89999 / 30 が近似値になってしまっているようです。例えば
mysql> select 0.89999/30, 0.89999/30.0, cast(0.89999 as decimal(6,5))/30, cast(0.89999 as decimal(6,5))/30.0;
+-------------+--------------+----------------------------------+------------------------------------+
| 0.89999/30 | 0.89999/30.0 | cast(0.89999 as decimal(6,5))/30 | cast(0.89999 as decimal(6,5))/30.0 |
+-------------+--------------+----------------------------------+------------------------------------+
| 0.029999666 | 0.029999667 | 0.029999666 | 0.029999667 |
+-------------+--------------+----------------------------------+------------------------------------+
1 row in set (0.00 sec)
と、除数を 30.0 とすると結果が違うことが分かります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/22 14:56