Mysql
以非指數形式檢索雙精度數據類型值
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。