回答編集履歴

1

追記

2018/04/20 07:00

投稿

退会済みユーザー
test CHANGED
@@ -14,14 +14,30 @@
14
14
 
15
15
 
16
16
 
17
- ここからは、`float`あるあるですが、内部的に 2 進数でもっている数値を 10 進数で表すので、誤差が生じます。
17
+ ~~~ここからは、`float`あるあるですが、内部的に 2 進数でもっている数値を 10 進数で表すので、誤差が生じます。
18
18
 
19
- 多分、その誤差が`-0`なんてへんな数字を作り出したのだと思われます。
19
+ 多分、その誤差が`-0`なんてへんな数字を作り出したのだと思われます。~~~
20
20
 
21
21
 
22
22
 
23
- ので、yambejp さんの回答のように、(int) へキャストしてやることで、`0`になるのだろうと。
23
+ ~~~ので、yambejp さんの回答のように、(int) へキャストしてやることで、`0`になるのだろうと。~~~
24
24
 
25
25
 
26
26
 
27
27
  これ、盲点でした^^;分岐条件で間違えちゃいそうですw
28
+
29
+
30
+
31
+ # **回答が見つかったので、追記します。**
32
+
33
+ [2009年1月23日(金) PHPで==の代わりにstrcmp関数を使うことによる問題点](http://d.hatena.ne.jp/hnw/20090123)
34
+
35
+ こちらのサイトで、少しだけ触れられていました。
36
+
37
+ > -0.0
38
+
39
+ 浮動小数点数は、プラスから0.0に近付いた場合とマイナスから0.0に近付いた場合を区別するため、計算結果が0.0でも符号がつきます。PHP5.2.3からは、この-0.0をstring型にキャストすると"-0"になるようになりました。-0.0も数としては0.0と同じなので、==や===で比較すると同じ数になりますが、strcmpで比較すると異なる文字列として扱われてしまいます。
40
+
41
+
42
+
43
+ ただし、この変更を公式で見つけることは出来ませんでした^^;