2015-11-06 50 views
0
字符串

我有一個從CSV數據,列ID的內容是這樣的6.61884E+176.61881E+176.61878E+17轉換6,61884E + 17到PHP

此代碼不能工作,這段代碼的結果是一樣的: (

$a = '6.61884E+17'; 
$b = (string) floatval($a); 

如何6.61884E+17轉換爲字符串

更新:

我嘗試number_format(6.61884E+17,0,'','')並因此得到661884000000000000。 。我的預期結果是661883847445868544

+0

使用sprint()或類似的方法....'$ a ='6.61884E + 17'; $ b = sprintf('%f',floatval($ a)); echo $ b;' –

+0

這應該解決您的問題:http://stackoverflow.com/a/4964120/1610183 – Andrius

+0

從技術上講,這個數字是正確的。 PHP將大整數轉換爲浮點數(失去精度)。你'可以'使用MCBath來擴展它,但你會得到的是一個非常大的數字,最後有很多零。 – Flosculus

回答

0

您想要從6.61884E+17中提取數字661883847445868544
由於「整數溢出」,這是不可能的。

PHP通過將它轉換爲一個float來處理它(這是愚蠢的,因爲你無法對它們執行基本的算術)。

現在,如果您運行echo strval(661883847445868544);並返回相同的值,則您正在運行PHP 64位,並且可以處理該數字。但是,什麼是明確的是,創建該CSV程序是32位,而最大的整數值是:

2,147,483,647 signed 
4,294,967,295 unsigned 

6.61884E+17傾倒後,精度後的第6位丟失,並沒有什麼你可以把它拿回來。抱歉。

+0

我現在明白了,謝謝你的解釋;) – Anatasya

+0

@Anatasya說了那麼多。如果你在控制CSV的生成,並且程序支持任意精度(PHP有bcmath),那麼你可以轉儲完整的值。但是任意的精確度都是有感染力的,一旦你開始依賴它,你將永遠無法停止使用它,所以它最好解決這個問題。 – Flosculus