我將值存儲在定義爲float的列中。當我從數據庫中讀回這些值時,他們有時會與原始值有很大差異(我知道float沒有存儲確切值,請看一下示例以瞭解我的意思)。MySQL用於顯示浮點值的規則是什麼?
這裏是我的測試案例:
drop table if exists float_test;
create table float_test (value1 float(8, 3), value2 float);
insert into float_test values (11743.85, 11743.85);
select mt.*, round(mt.value1, 6), round(mt.value2, 6) from float_test mt;
選擇的結果是:
mysql> select mt.*, round(mt.value1, 6), round(mt.value2, 6) from float_test mt;
+-----------+---------+---------------------+---------------------+
| value1 | value2 | round(mt.value1, 6) | round(mt.value2, 6) |
+-----------+---------+---------------------+---------------------+
| 11743.850 | 11743.8 | 11743.849609 | 11743.849609 |
+-----------+---------+---------------------+---------------------+
1 row in set (0.01 sec)
正如你可以看到,選擇值2的結果11743.8而選擇圓(值2,6)結果這個數值與我最初輸入的數值非常接近。同樣如果你
mysql> select * from float_test mt where value1 = value2;
+-----------+---------+
| value1 | value2 |
+-----------+---------+
| 11743.850 | 11743.8 |
+-----------+---------+
1 row in set (0.00 sec)
你可以看到t存儲在value1和value2中的值實際上是相等的。因此,我認爲這只是結果如何顯示的問題。仔細查看MySQL文檔,我找不到任何規則說明浮動值如何自動四捨五入來顯示。
所以現在我有兩個問題:
1. mysql用於顯示浮點值的規則是什麼?
2.是否有一種方法(例如一些配置選項)我可以檢索未舍入到第一個小數位的值,而不修改我的表定義並且不更改我的選擇語句?
我已經在mysql 4.0,5.0和5.1上測試了這個。
謝謝
斯特凡