2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【PHP】数値を位取り(上数)して返す関数

Last updated at Posted at 2015-01-30

はじめに

初心者が書いたコードですので、ご指摘やアドバイス等頂けると嬉しいです。

やりたいこと

「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);
2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?