回答編集履歴
1
追記
answer
CHANGED
@@ -6,9 +6,17 @@
|
|
6
6
|
・floor()
|
7
7
|
のいずれも、返り値が`float`なんですね。。。
|
8
8
|
|
9
|
-
ここからは、`float`あるあるですが、内部的に 2 進数でもっている数値を 10 進数で表すので、誤差が生じます。
|
9
|
+
~~~ここからは、`float`あるあるですが、内部的に 2 進数でもっている数値を 10 進数で表すので、誤差が生じます。
|
10
|
-
多分、その誤差が`-0`なんてへんな数字を作り出したのだと思われます。
|
10
|
+
多分、その誤差が`-0`なんてへんな数字を作り出したのだと思われます。~~~
|
11
11
|
|
12
|
-
ので、yambejp さんの回答のように、(int) へキャストしてやることで、`0`になるのだろうと。
|
12
|
+
~~~ので、yambejp さんの回答のように、(int) へキャストしてやることで、`0`になるのだろうと。~~~
|
13
13
|
|
14
|
-
これ、盲点でした^^;分岐条件で間違えちゃいそうですw
|
14
|
+
これ、盲点でした^^;分岐条件で間違えちゃいそうですw
|
15
|
+
|
16
|
+
# **回答が見つかったので、追記します。**
|
17
|
+
[2009年1月23日(金) PHPで==の代わりにstrcmp関数を使うことによる問題点](http://d.hatena.ne.jp/hnw/20090123)
|
18
|
+
こちらのサイトで、少しだけ触れられていました。
|
19
|
+
> -0.0
|
20
|
+
浮動小数点数は、プラスから0.0に近付いた場合とマイナスから0.0に近付いた場合を区別するため、計算結果が0.0でも符号がつきます。PHP5.2.3からは、この-0.0をstring型にキャストすると"-0"になるようになりました。-0.0も数としては0.0と同じなので、==や===で比較すると同じ数になりますが、strcmpで比較すると異なる文字列として扱われてしまいます。
|
21
|
+
|
22
|
+
ただし、この変更を公式で見つけることは出来ませんでした^^;
|