for文で、小数点第一位の特定の数値に色をつけるにはどうしたらよいでしょうか? - PHPプロ!Q&A掲示板

4910

  • 0P

for文で、小数点第一位の特定の数値に色をつけるにはどうしたらよいでしょうか?

質問日時 / 2017年12月19日 17:12    回答数 / 1件

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

キーワード / for        if   

度々すみません。

この文では成功しましたが、

<table>
<?php
$N=30;
 
for($i=0;$i<=100;$i++){
    if ($i == $N) {
        echo('<tr>');
        echo('<td style = "color:#ff0000">'.$i.'</td>');
        echo('</tr>');
    } else {
        echo('<tr>');
        echo('<td>'.$i.'</td>');
        echo('</tr>');
    }
}
?>
</table>

小数点第一位のこの文では成功しません。
どうすればよいのでしょうか?

<table>
<?php
$N=30;
 
for($i=0;$i<=100;$i+=0.1){
    if ($i == $N) {
        echo('<tr>');
        echo('<td style = "color:#ff0000">'.$i.'</td>');
        echo('</tr>');
    } else {
        echo('<tr>');
        echo('<td>'.$i.'</td>');
        echo('</tr>');
    }
}
?>
</table>

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01shimix二進の浮動小数点では 0.1 という数値を正しく表現す

回答一覧

並び替え:

A01 満足
answerershimix [12月20日 08:52] (最終編集:12月20日 08:54)

二進の浮動小数点では 0.1 という数値を正しく表現することが出来ません。必ず誤差が出ます。

#0.5とか0.25とか0.125とか0.0625なら(あるいはそれを
#加算した値なら)「ぴったり」なんですけどね

加算していけば(誤差が)累積されてしまいますので、小数部が存在しないハズの値でも整数値と一致しなくなります。


(0.1刻みでどういう値になっているか確認するサンプル)
  1. <table>
  2. <?php
  3. $N = 3;
  4. $NORMAL = '<tr><td>%2.16F</td></tr>' . PHP_EOL;
  5. $RED = '<tr><td style = "color:#ff0000">%2.16F</td></tr>' . PHP_EOL;
  6.  
  7. for ($i=0$i<=10$i+=0.1) {
  8.     if ($i == $N) {
  9.         printf($RED$i);
  10.     } else {
  11.         printf($NORMAL$i);
  12.     }
  13. }
  14. ?>
  15. </table>
0.1刻みにせず、整数で刻んで /10 するべきです(それでも小数部があるケースでは誤差は出ます)。

(整数値で刻んで除算した結果を比較・表示に使うサンプル)
  1. <table>
  2. <?php
  3. $N = 3;
  4. $NORMAL = '<tr><td>%2.16F</td></tr>' . PHP_EOL;
  5. $RED = '<tr><td style = "color:#ff0000">%2.16F</td></tr>' . PHP_EOL;
  6.  
  7. for ($i=0$i<=100$i+=1) {
  8.     $w = $i / 10;
  9.     if ($w == $N) {
  10.         printf($RED$w);
  11.     } else {
  12.         printf($NORMAL$w);
  13.     }
  14. }
  15. ?>
  16. </table>

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

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

>>続きを読む

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

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