echo 180.1 - 180 で 0.099999999999994? - PHPプロ!Q&A掲示板

4866

  • 募集中!! 0P

echo 180.1 - 180 で 0.099999999999994?

質問日時 / 2017年10月1日 08:31    回答数 / 1件

Questioner:  kesuikeutosa  このエントリーをはてなブックマークに追加 

キーワード / 計算   

変な質問ですが、

echo 180.1-180 で呼び出すと、

答えが、

0.099999999999994 になってしまいます。

なぜでしょうか?
何か設定がおかしいのでしょうか?

教えてください。よろしくお願いします。


ツリー一覧

┗A01shimixphpに限らず、ほとんどのプログラミング言語で起こり

回答一覧

並び替え:

A01 満足
answerershimix [10月2日 15:07] (最終編集:10月2日 15:15)

phpに限らず、ほとんどのプログラミング言語で起こり得ることです。

https://dobon.net/vb/dotnet/beginner/floatingpointerror.html

  1. <?php
  2. $a = 180.1;
  3. $b = 180.0;
  4.  
  5. echo ($a - $b) . '<br>';
  6. echo (($a * 10 - $b * 10) / 10) . '<br>';
  7. echo '<hr>';
  8.  
  9. printf('%8.1f<br>'$a - $b);
  10. printf('%8.2f<br>'$a - $b);
  11. printf('%8.3f<br>'$a - $b);
  12. printf('%8.4f<br>'$a - $b);
  13. printf('%8.5f<br>'$a - $b);
  14. printf('%8.6f<br>'$a - $b);
  15. printf('%8.7f<br>'$a - $b);
  16. printf('%8.8f<br>'$a - $b);
  17. printf('%8.9f<br>'$a - $b);
  18. printf('%8.10f<br>'$a - $b);
  19. printf('%8.11f<br>'$a - $b);
  20. printf('%8.12f<br>'$a - $b);
  21. printf('%8.13f<br>'$a - $b);
  22. printf('%8.14f<br>'$a - $b);
  23. printf('%8.15f<br>'$a - $b);
  24. printf('%8.16f<br>'$a - $b);
  25. echo '<hr>';

  1. <?php
  2. if ((0.1 + 0.2) == 0.3) { // バイナリで表現できない(近似値になる)データ
  3.      echo "same";
  4. } else {
  5.      echo "different";
  6. }
  7. if ((1.5 + 2.125) == 3.625) { // バイナリで表現可能なデータ
  8.      echo "same";
  9. } else {
  10.      echo "different";
  11. }

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)