はじめに
初心者が書いたコードですので、ご指摘やアドバイス等頂けると嬉しいです。
やりたいこと
「10000、100000000、10000000000000」などの数値を「1万、1億、1兆」と位取りして返す関数をつくりたい。
※10000倍毎に位取りが変わるものを「上数」と呼ぶそうです。
参考:命数法 - Wikipedia
数値 | 位 |
---|---|
1 | 1 |
10 | 10 |
100 | 100 |
1,000 | 1000 |
10,000 | 1万 |
100,000 | 10万 |
1,000,000 | 100万 |
10,000,000 | 1000万 |
100,000,000 | 1億 |
1,000,000,000 | 10億 |
10,000,000,000 | 100億 |
100,000,000,000 | 1000億 |
1,000,000,000,000 | 1兆 |
10,000,000,000,000 | 10兆 |
100,000,000,000,000 | 100兆 |
1,000,000,000,000,000 | 1000兆 |
コード
ググりながら書いたコードです。
考えつくバリデーションをしております。
最初に書いたコード
<?php
header('Content-Type: text/html; charset=UTF-8');
/*
数値を位取り(上数)して返す関数
*/
function convert_number_unit($var) {
//変数が定義されているかチェック
if(isset($var)) {
//半角に変換
$var = mb_convert_kana($var,'n','UTF-8');
//前後のスペースを削除
$var = trim($var);
//数値のみ抽出
$var = preg_replace('/[^0-9]/', '', $var);
//数字か数値文字列かチェック
if(is_numeric($var)) {
//文字数をカウント
$count = mb_strlen($var,'UTF-8');
//文字数がx個ならyで割って単位を付ける
if($count <= 4) {
echo $var;
} elseif ($count <= 8) {
echo $var / 10000 . '万';
} elseif ($count <= 12) {
echo $var / 100000000 . '億';
} elseif ($count <= 16) {
echo $var / 1000000000000 . '兆';
} else {
die('1000兆以内で入力してください');
}
} else {
die('整数を入力してください');
}
} else {
die('数字を入力してください');
}
}
$hoge = '105240000あいえう,.、0000';
convert_number_unit($hoge); //実行結果 1.0524兆
書き直したコード
<?php
header('Content-Type: text/html; charset=UTF-8');
/*
数値を単位に変換する関数
*/
function convert_number_unit($var) {
//半角に変換
$var = mb_convert_kana($var,'n','UTF-8');
//数値のみ抽出
$var = preg_replace('/[^0-9]/', '', $var);
//数字か数値文字列かチェック
if (!is_numeric($var)) {
die('整数を入力してください');
}
//文字数をカウント
$count = strlen($var);
//文字数がx個ならyで割って単位を付ける
if($count <= 4) {
echo $var;
} elseif ($count <= 8) {
echo $var / 10000 . '万';
} elseif ($count <= 12) {
echo $var / 100000000 . '億';
} elseif ($count <= 16) {
echo $var / 1000000000000 . '兆';
} else {
die('1000兆以内で入力してください');
}
}
$hoge = '105240000あいえう,.、0000';
convert_number_unit($hoge);