一回も披露したことのない豆知識

いつも大変お世話になっております。
また、お知恵を拝借したく思います。

今、小数点二位までの数字を扱って計算しております。
計算結果の表示について、少数点第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と表示


関数、あるいはアイディアがありましたら、
是非お願いいたします。この後で補足で現在の私のプログラムをのせます。(恥を承知の私のプログラムです。)
これを直していただかなくてもよいのです。目的は正確な答えを出すことですので、他に良い方法があればどんな方法でも良いのです。

A 回答 (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";
}
?>
    • good
    • 0
この回答へのお礼

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さんの両方使わせて頂きます!

みなさん、ありがとうございました!感謝してます!

お礼日時:2004/07/24 20:21

参考URLを見てください。



参考URL:http://www.php.net/manual/ja/function.round.php
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/07/24 20:07

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2004/07/24 20:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!