2011-07-18 13 views
1

我有一個變量$x,它的值是從XML文件讀入的。從XML中讀取的值是1.963788,僅此而已。當我輸出$x時,我看到$x中的值實際上是1.963788。一切都與世界正確。PHP忽略公式中小數點右側的位數

但是當我用x的方程在諸如

$pl = $x*125.0-200.0; 

$pl的值最終被-75。無論出於何種原因,PHP似乎忽略了$x中小數點右側的數字,或者只是擺脫了小數點右側的數字,這使得$x包含1.我想也許在地獄中有一個雪球的機會,這發生在其他語言中所以我用C++編寫了它,並且非常驚喜,我得到了45.4735的正確答案。

任何曾經遇到過這個或知道發生了什麼事?謝謝。

+0

這也應該在PHP無w/o問題。確保'$ x'確實包含一個浮點數。在'$ pl = ...'這一行之前插入'var_dump($ x)'時會給出什麼? –

回答

1

您是否嘗試過使用floatval? 也許PHP將你的數字解釋爲一個字符串,標準轉換將它轉換爲整數。

+0

不,PHP會透明地將一個'1.963788'的字符串轉換爲適當的'float'。如果它看到一個字符對數字格式無效,例如它將轉換爲「int」。 ''1,963788''會導致'(int)1' –

+0

事實上,Daniel看起來似乎是對的。爲此事道歉;我習慣Perl的方式來處理這個:)在PHP中,顯然如果它是從XML讀入的,它是一個字符串,除非程序員明確指定。謝謝! – dmn

+1

仍然沒有。如果是這樣,[字符串轉換爲數字](http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion)的官方PHP文檔將不明顯現在有些年來錯了^^。無論如何,沒有時間進一步挑剔^^ –

1

這可能是由於$x被解釋爲字符串,並轉換爲整數而非浮點值的事實。

嘗試:

$pl = (float) $x * 125.0 - 200.0; 
+0

PHP會自動處理,字符串將被轉換爲浮動,結果將是浮動:http://php.net/manual/en/language.types.type-juggling。 PHP – rubayeet

0

只要你計算$pl之前,做一個var_dump$x,看看有什麼是存儲在它的實際價值。我試過你的代碼,它返回了正確的值45.4735,所以我可能不是PHP的錯。

1

你的電話號碼似乎無法投射爲浮動。如果我使用'1,963788',我會得到你的結果。如果我使用「2,963788」我收到的50結果按照PHP文檔的intval(這就是它似乎PHP正試圖施放此作爲一個整數): Strings will most likely return 0 although this depends on the leftmost characters of the string. The common rules of integer casting apply.

檢查值$ x其實很仔細。它可能不是你所期望的,因爲PHP似乎不同意它實際上是一個浮點數,或者它本來就是這樣輸入的。