2016-12-06 20 views
0

我認爲我已經看到了這個問題,但是經過2個小時的搜索後我找不到它。當我使用PDO從SQL中選擇一個REAL數據類型時,數字發生了變化

我在我的數據庫中的REAL數據類型,我存儲的值0.00054

當我在SQL工作室選擇它,我得到0.00054沒有問題。

當我使用PDO在PHP中選中它,我得到0.00053999998

下面是從SQL工作室也:

select val_real, convert(decimal(38,18),val_real) from myTable 

結果:0.00054, 0.000539999979082490

從PHP使用PDO結果:

5.3999998E-4, .000539999979082490 

它看起來像PHP轉換類型之前,我可以克等等。我正在拉我的頭髮。我怎樣才能解決這個問題?

謝謝

+0

0.00053999998如果你問我,似乎很接近0.00054。 SQL實際上與您的PHP結果具有相同的值,所以這都是正常的。 –

+0

哈哈,是的,它非常接近,問題是這是一個用戶輸入的號碼,它必須匹配他們輸入的內容,而不是改變他們的號碼。 –

+0

在這種情況下,請使用字符串或小數,而不是真實的。 –

回答

2

PHP不轉換任何東西,也通過您的SQL查詢證明:

select val_real, convert(decimal(38,18),val_real) from myTable 

result: 0.00054, 0.000539999979082490 

的問題是,價值0.00054不能使用真實準確地反映等你拿最接近它的值,即0.000539999979082490

閱讀:http://floating-point-gui.de/瞭解更多信息。

如果您需要逐字地存儲用戶輸入的數據,請使用字符串類型或小數點,如果您需要數字。

+0

爲什麼我可以在SQL Studio中看到0.00054而不是通過PHP PDO購買? SQL中的數據類型是REAL,爲什麼選擇它時顯示0.00054? –

+0

當我從SQL Studio中選擇真正的數據類型時,它給出了0.00054如果真實無法正確表示它,它該怎麼做? –

+0

你讀過我給你的鏈接了嗎?要將數據表示爲'0.00054',您必須將其舍入,顯然SQL Studio會爲您執行此操作。 –

相關問題