double
データ型の列で非指数値を取得することは可能ですか?列の幅が15に増加すると、値が指数形式で表示されます。
今、私は以下を取得します:
mysql> create table abc(a int,b double) engine innodb;
mysql> insert into abcd values(10,123456789123456789123456789);
mysql> select * from abc;
+------+-----------------------+
| a | b |
+------+-----------------------+
| 10 | 1.2345678912345679e26 |
+------+-----------------------+
これの代わりに、mysqlクライアントで123456789123456789123456789
として入力した形式で表示する必要があります。
倍精度浮動小数点値 は、精度を失うことなく数値123456789123456789123456789を含むことができないため、実行しようとしていることを正確に実行することはできません。
"double"はメモリの 8バイトで格納 であり、MySQLではなく、 "double"の性質により、約15桁の精度に制限されています。
上記の挿入を実行すると、実際には1.2345678912345679 x 10 ^ 26 ...が格納されているため、MySQLは実際に値を正しく返します。
数値を元のformatに強制的に戻すことは可能ですが、正確な元のvalue正確な値を保存していなかったため 。それを十分に大きいDECIMAL値にキャストしてから、DECIMALをCHARにキャストします。
SELECT CAST(CAST(b AS DECIMAL(30)) AS CHAR) FROM abcd;
返される値は123457890123456790000000000 ...です。これはフィールドに格納されているものだからです(見た目は逆ですが)正しいですが、その形式で表現された値は不正確な精度を与えます...これがおそらく理由ですそもそも指数表記で返されています。
精度が必要な場合は、これらの値をDOUBLEではなくDECIMAL列に格納します。