• ベストアンサー

特別な四捨五入の計算方法について

いつも大変お世話になっております。 また、お知恵を拝借したく思います。 今、小数点二位までの数字を扱って計算しております。 計算結果の表示について、少数点第2桁目をみて、下の3つの決まりごとにわけて表示させたいのですが、 既にある関数などが見つかりません。うまい方法はあるのでしょうか? 例) 10.90 10.91 10.92 これらなら、少数点第2桁目を切り捨て、10.90と表示 10.93 10.94 10.95 10.96 10.97 これらなら、10.95と表示 10.98 10.99 なら少数点第2桁目を切り上げて、11.00と表示 関数、あるいはアイディアがありましたら、 是非お願いいたします。この後で補足で現在の私のプログラムをのせます。(恥を承知の私のプログラムです。) これを直していただかなくてもよいのです。目的は正確な答えを出すことですので、他に良い方法があればどんな方法でも良いのです。

質問者が選んだベストアンサー

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.3

こんな感じではいかがでしょうか。 一応動作確認済みです。 <form action="st.php" method="POST"> <input type="text" size="10" name="num"> <input type="submit"> </form> <?PHP if ($_POST['num']) { # 小数点第二桁に整形する $num = round($_POST['num'], 2); # 最後の数字を抜き出す $end_num = substr($num, -1); if ($end_num == 1) { $p_num = -0.01; } elseif ($end_num == 2) { $p_num = -0.02; } elseif ($end_num == 3) { $p_num = 0.02; } elseif ($end_num == 4) { $p_num = 0.01; } elseif ($end_num == 5) { $p_num = 0; } elseif ($end_num == 6) { $p_num = -0.01; } elseif ($end_num == 7) { $p_num = -0.02; } elseif ($end_num == 8) { $p_num = 0.02; } elseif ($end_num == 9) { $p_num = 0.01; } # 足し算 $num += $p_num; echo "<b>元値:</b>{$_POST['num']}<br>\n"; echo "<b>修正値:</b>$num<br>\n"; } ?>

maigo100
質問者

お礼

moon_nightさん、動作確認までして下さりありがとうございました。感謝です! それから私が重複して書いてしまった(既に削除されてしまいました)方に回答を下さったosamuyさんの回答もこちらに紹介させてください。こちらをご覧になる方たちにとても参考になると思いました。 ●osamuyさんの回答内容 : PHPオンラインマニュアルのUser Contributed Notesより: <? for ( $x = 10.90; $x <= 11.0; $x += 0.01 ){ printf( "%2.2f %2.2f\n", $x, round( $x * 2, 1 ) / 2 ); } ?> でした。 これを($A元値,$B結果値)として応用してしたら、 $B = sprintf( "%2.2f %2.2f\n", $A, round( $total_sales_price * 2, 1 ) / 2 ); ずばり答えが出ました! osamuyさん、私の不注意で折角の回答が消えてしまって、ほんとうにごめんなさい。 私のプログラムにはこのルーチンを使う場所が複数箇所あります。moon_nightさんとosamuyさんの両方使わせて頂きます! みなさん、ありがとうございました!感謝してます!

その他の回答 (2)

  • rucifer
  • ベストアンサー率46% (6/13)
回答No.2

参考URLを見てください。

参考URL:
http://www.php.net/manual/ja/function.round.php
maigo100
質問者

お礼

おかげさまで解決しました。ありがとうございました。

  • betagamma
  • ベストアンサー率34% (195/558)
回答No.1

一度、文字列に直して、小数点第2桁(一番右の文字)を取り出し、switchで分岐させて返す関数を作ればいいのではないでしょうか?

maigo100
質問者

お礼

解決しました。ありがとうございました。

関連するQ&A