人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPで自分で指定してある小数点以上だったら
切捨てる場合はどうしたらいいでしょうか?
$A = 60.7313432836 => $A = 60.73
$B = 111199.46789 => $B = 111199.46
$C = 60.11 => $C = 60.11
$D = 8888881.999999999922 => $D = 8888881.99
今回は小数点第二で切捨てていますが
この小数点第二などは変換する
変数の引数に設定できるよう
お願い致します。
現在のサンプル
$AAA = (float)number_format($A, $n);
とやると
結果が60.73なのですが
$AAA = (float)number_format($B, $n);
とやると
結果が11になってしまいます。
このサンプルはダメなのですが書きかたは
同じ様に出来ませんか?

●質問者: hopefully
●カテゴリ:就職・転職 ウェブ制作
✍キーワード:AAA PHP ダメ 変数 小数点
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● GEN111
●27ポイント
$A = 60.7313432836 ;
$B = 111199.46789 ;
$C = 60.11 ;
$D = 8888881.999999999922 ;

$n = 2 ;

// 例1
$AAA = (float)floor($A * pow(10, $n)) / pow(10, $n) ;

// 例2
$AAA = (float)preg_replace('/(\d*?\.)(\d{1,2})\d*/', '$1$2', $A) ;

こんな感じでどうでしょう。

◎質問者からの返答

この例1のpowと10は必ず固定でも

問題ないでしょうか?


2 ● GEN111
●27ポイント

pow(a, b) は a の b 乗 の意味ですので、$n = 2 のとき

100 をかけて floor を取ったあと 100 で割るという意味です。

$n = 3 なら 1000 になります。

このままで結構です。

◎質問者からの返答

納得です。

それともう一点なのですが

$A= 11で

実行すると

$A= 11.00となってしまうのですが

最後が.00の場合はその.00を

表示しないようにするには

計算が終わった後に自力で

やるしかないのでしょうか?


3 ● tezcello
●26ポイント

数学的にやろうとすると、当方の環境では

60.11 => 60.10 (丸め誤差のため)

8888881.999999999922 => 8888882 (有効桁オーバーフロー)

で上手くいかないので、文字列として扱うのを考えました。

(元の値が、計算結果なら無意味ですが)



$A = 60.7313432836 ;
$aa = round2($A, 2);

$E = 11;
$ee1 = round2($E, 2);
$ee2 = round2($E, 2, 1);

function round2($a, $b, $f=0){
 if (!ereg('/\./', $a)) {
 // 小数点以下がない場合
 if ($f) return $a;
 $a .= '.';
 }
 for ($i=0; $i<$b; $i++) $a .= '0';

 // 正規表現のマッチ文字列をつくる
 $rexp = '/(\d*)\.';
 for ($i=0; $i<$b; $i++) $rexp .= '(\d?)';
 $rexp .= '(\d*)/';

 preg_match($rexp, $a, $r);

 $ret = '';
 for ($i=2; $i<=$b+1; $i++) $ret .= $r[$i];
 if (!$f){
 // 必要ならここでトレーディングゼロサプレス処理をする
 }

 $ret = $r[1] . '.' . $ret;

 return $ret;
}

'11.00' と '11' では数学的意味合いが違うので、どちらも使えるようにスイッチをつけておきました。

上の結果は、$ee1 = '11.00', $ee2 = '11' となります。

◎質問者からの返答

元の値が、計算結果なら無意味ですがというのは

どういう意味でしょうか?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ