2011-07-18 20 views
1

値がXMLファイルから読み込まれる変数$xがあります。 XMLから読み取られる値は1.963788です。これ以上のものはありません。 $xを出力すると、実際には$xの値が1.963788であることがわかります。すべてが世界と正しかった。数式の小数点以下の桁を無視するPHP

しかし、私は、このような

$pl = $x*125.0-200.0; 

として式中のxを使用するときに$plの値が-75なってしまいます。何らかの理由で、PHPは$xの小数点以下の桁を無視しているか、または取り除いているように見えます。$xには1が含まれています。これは他の言語で起こった可能性がありますあまりにも、私はC + +でそれを書いて、大きな驚き、私は45.4735の正しい答えを得る。

これまでにこれまでに遭遇したこと、または何が起こっているかを知っている人はいますか?ありがとう。

+0

これはPHPの問題がない場合でも有効です。 '$ x'に実際にfloatが含まれていることを確認してください。 '$ pl = ...'の直前に 'var_dump($ x)'が挿入されたときの意味は? –

答えて

1

floatvalを試しましたか? PHPはあなたの数値を文字列として解釈し、標準の変換はそれを整数に変換します。

+0

いいえ、PHPは透過的に '' 1.963788 'の 'string'を適切な' float'にキャストします。数値フォーマットには有効でない文字を見ると 'int'に変換されます。 「1,963788」は '(int)1'となります。 –

+0

実際、ダニエルは正しいと思われます。これにつきましては申し訳ございません;私は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を計算する直前に、それに保存されている実際の値であるかを確認する$xvar_dumpを行います。私はあなたのコードを試して、それは正しい値45.4735を返すので、私はPHPの欠陥ではないかもしれません。

1

あなたの番号はフロートとしてキャストに失敗したようです。私が '1,963788'を使用すると、あなたの結果が得られます。私は「2,963788」を使用した場合、私はintvalのためにPHPのドキュメントによると、50の結果を受け取る(とそれは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が実際には浮動小数点型であるか、それとも浮動小数型型であるかということにPHPが同意しないように思われるので、期待通りではないかもしれません。

関連する問題