回答編集履歴
1
記述修正
answer
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
以下、いずれも [MySQL のマニュアル](https://dev.mysql.com/doc/refman/5.6/ja/)を参考にしてください。
|
2
2
|
|
3
|
-
1
|
3
|
+
1 [マニュアルの記述](https://dev.mysql.com/doc/refman/5.6/ja/arithmetic-functions.html)通りで、除算演算子の場合の有効桁数は、除数・被除数のうちの精度の高い方に、div_precision_increment の桁数を足した物になります。
|
4
4
|
|
5
|
-
2
|
5
|
+
2 [マニュアルの記述](https://dev.mysql.com/doc/refman/5.6/ja/precision-math-decimal-characteristics.html)より、DECIMAL 型の最大精度は (65, 30) です。ですので小数点以下30桁を超える場合は31桁目で四捨五入された値を利用します。
|
6
6
|
```
|
7
7
|
mysql> select cast(0.8999999999999999999999999999999 as decimal(65,30));
|
8
8
|
+-----------------------------------------------------------+
|
@@ -13,7 +13,7 @@
|
|
13
13
|
1 row in set (0.00 sec)
|
14
14
|
```
|
15
15
|
|
16
|
-
3
|
16
|
+
3 0.89999 / 30 が近似値になってしまっているようです。例えば
|
17
17
|
```
|
18
18
|
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;
|
19
19
|
+-------------+--------------+----------------------------------+------------------------------------+
|
@@ -23,4 +23,4 @@
|
|
23
23
|
+-------------+--------------+----------------------------------+------------------------------------+
|
24
24
|
1 row in set (0.00 sec)
|
25
25
|
```
|
26
|
-
と、除数を 30.0 とすると
|
26
|
+
と、除数を 30.0 とすると結果が違うことが分かります。
|