phpで金額の単位「億」を表示したい。


変数$sougakuの中には7桁・6桁・5桁・4桁いずれかの数値が入っています。

これを

1234567だった場合、123億4567万円
123456の場合、12億3456万円
12345の場合、1億2345万円
4桁の場合は、そのまま1234万円としたいのです。


この「億」の挿入の仕方を教えてください。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/07/04 02:24:52
  • 終了:2013/07/04 21:55:25

ベストアンサー

id:psne No.1

ぽけっとしすてむ回答回数454ベストアンサー獲得回数2432013/07/04 05:42:22

ポイント70pt

絶対に7桁以上超えないという場合

$sougaku = 1234567;
echo number_format_to_str($sougaku);
function number_format_to_str($amount){
	$amount_str = number_format(($amount/10), 1, '', '億');
	return $amount_str . '万円';
}

将来的に桁数が増える事が容易に予想する事ができるので

$sougaku = 12345678;
echo number_format_to_str($sougaku);
function number_format_to_str($amount){
	$amount_str ='';

	$cho = floor($amount / 100000000);
	$oku = floor(($amount % 100000000) / 10000);
	$man = ($amount % 100000000) % 10000;

	if ($cho){$amount_str = $cho . '兆';}
	if ($oku){$amount_str .= $oku . '億';}
	if ($man){$amount_str .= $man . '万';}

	return ($amount_str) ? $amount_str . "円" : "0円";
}
他2件のコメントを見る
id:psne
	$amount_str = number_format(($amount/10), 1, '', 's');
	$amount_str = str_replace('s', '億', $amount_str);

number_formatで2byte文字の文字化けが発生するのであれば、後から変換する事も可能です。(本来はそういった使い方が正しい)

2013/07/04 20:51:20
id:jamis

ありがとうございます。
後から変換する事にしました。
思い通りのものができました。

2013/07/04 21:53:48

その他の回答(1件)

id:psne No.1

ぽけっとしすてむ回答回数454ベストアンサー獲得回数2432013/07/04 05:42:22ここでベストアンサー

ポイント70pt

絶対に7桁以上超えないという場合

$sougaku = 1234567;
echo number_format_to_str($sougaku);
function number_format_to_str($amount){
	$amount_str = number_format(($amount/10), 1, '', '億');
	return $amount_str . '万円';
}

将来的に桁数が増える事が容易に予想する事ができるので

$sougaku = 12345678;
echo number_format_to_str($sougaku);
function number_format_to_str($amount){
	$amount_str ='';

	$cho = floor($amount / 100000000);
	$oku = floor(($amount % 100000000) / 10000);
	$man = ($amount % 100000000) % 10000;

	if ($cho){$amount_str = $cho . '兆';}
	if ($oku){$amount_str .= $oku . '億';}
	if ($man){$amount_str .= $man . '万';}

	return ($amount_str) ? $amount_str . "円" : "0円";
}
他2件のコメントを見る
id:psne
	$amount_str = number_format(($amount/10), 1, '', 's');
	$amount_str = str_replace('s', '億', $amount_str);

number_formatで2byte文字の文字化けが発生するのであれば、後から変換する事も可能です。(本来はそういった使い方が正しい)

2013/07/04 20:51:20
id:jamis

ありがとうございます。
後から変換する事にしました。
思い通りのものができました。

2013/07/04 21:53:48
id:tobeoscontinue No.2

tobeoscontinue回答回数212ベストアンサー獲得回数522013/07/04 17:18:11

ポイント30pt
  function str_okuman($val) { # 数値だと14桁以上では指数表現になる
    $u = array('京','兆','億','万');
    $d = str_split(substr('000000000000000'.$val,-16),4);
    $r = array();
    foreach ($d as $i=>$v)
      if ($v !== '0000') $r[] = intval($v).$u["$i"];
    return empty($r) ? 0 : implode('',$r);
  }
  echo str_okuman(1234567)."円\n";

数値を文字列として四文字ずつに区切る方法で書いてみました。
桁を合わせる必要があるので先頭にゼロを付加して文字列の後ろから16文字をsubstrで取り出します。
それをstr_splitで4文字で区切るので4個の配列になります。
後は単位を結合して、最後に全体をimplodeしています

数値だと14桁以上では指数表現になるので正しく機能しません。
引数の$valは文字列でもいいので文字列なら16桁でも機能します。

id:jamis

ありがとうございます。
一例として、勉強になりました。
いろんな方法があるんですね。

2013/07/04 21:54:54

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません