2010-12-04 40 views
3

當我輸出一些雙變量時,它們使用fwrite以指數形式寫入。我可以在PHP中設置一些默認值,每當變量顯示(複製或存儲)時,它總是以十進制格式發生?PHP以指數形式輸出數字

準確地說,當我在包含一個double值(不是指數形式)的json字符串上使用json_decode方法時,會發生問題。轉換一個對象後的這個double值變成指數。

回答

1

假設數字仍然被寫入時(而不是字符串)浮動,這是做的一種方式:

echo rtrim(sprintf("%0.15f", $x), "0."); 

我不知道是否有一個更清潔的方式與否。但基本上這使用sprintf打印最多15個小數位,然後刪除任何尾隨的0.字符。 (當然,並不能保證所有的東西都能很好的跟隨零點,就像你期望的那樣。)

如果你只是想要一個固定大小,那麼你可以調整15並刪除rtrim

2

我有一個類似的問題,其中json_decode正在將最近的推特/推特ID轉換爲指數數字。

我解決它通過正在增加PHP的浮動精度,可以做不同的幾種方法...

  • 發現在你的php.ini中precision值,並將其更改爲precision = 20
  • 添加ini_set('precision', 20);到你的PHP應用程序
  • 添加php_value precision 20到您的應用程序的.htaccess或虛擬主機文件

否則,如果你沒事甲肝ING您BIGINT轉換爲字符串,你有PHP 5.3+,你也可以通過一個標誌,json_decode像這樣:json_decode($json, true, 512, JSON_BIGINT_AS_STRING)

+0

事實上:`5.4.0 \t選項參數是added.` - 所以它是5.4+但精確的東西 - 這是一個好主意:) – LeonardChallis 2013-06-10 08:40:49

相關問題