teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2018/04/20 07:00

投稿

退会済みユーザー
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
+ ただし、この変更を公式で見つけることは出来ませんでした^^;