Mysql

以非指數形式檢索雙精度數據類型值

  • November 2, 2012

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 |
+------+-----------------------+

123456789123456789123456789而不是這個,我希望它以我在 mysql 客戶端上輸入的形式顯示。

完全不可能做你想做的事情,因為雙精度浮點值不能包含數字 123456789123456789123456789 而不損失精度。

“雙精度”儲存在 8 個字節的記憶體中,並且被限制為大約 15 位有效數字的精度——不是由 MySQL 而是由“雙精度”的性質決定的。

當您執行上面顯示的插入時,您實際上儲存了 1.2345678912345679 x 10^26 … 所以 MySQL 實際上正確地返回了該值。

可以將數字強制恢復為原始格式,但不能強制恢復為確切的原始,因為您沒有儲存確切的值。將其轉換為足夠大的 DECIMAL 值,然後將 DECIMAL 轉換為 CHAR:

SELECT CAST(CAST(b AS DECIMAL(30)) AS CHAR) FROM abcd;

返回的值是 123457890123456790000000000 ……這是正確的(儘管看起來相反),因為這是儲存在欄位中的內容……但是以該格式表示的值給出了不准確的精確感……這可能是原因它首先以指數表示法返回。

如果您需要精度,您需要將這些值儲存在 DECIMAL 列中,而不是 DOUBLE。

引用自:https://dba.stackexchange.com/questions/27943