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

javascriptで数値を4桁毎に桁文字(億、万など)を挿入した文字列に変換したい

javascriptで定義した数値(例:var num = 10000)を1億というような表記に変換してアラートに出したいです。
num = 12345なら「1億2345万」、10000なら0や万を省略して「1億」とアラート表示したいです。
ちなみに1000000000なら10兆、としたいです。最大単位は京です。

以下のURLを参考にしましたが、上手く動作しませんでした。
しかもinputのvalue値からとりたいわけではなく、定義した数値を変えたいだけなので
もっと簡略なソースが知りたいです。
http://www.drk7.jp/MT/archives/001587.html

どなたかご教授お願いします。

●質問者: 匿名質問者
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● 匿名回答1号

こんな感じでしょうか。

http://w-x-w.com/demo/demo011.html

<span class="numChange">100000000000</span>
<script>
var cn = 'numChange'; // 変更するクラス名
var re = new RegExp(cn, 'gi');
var keta = ['万', '億', '兆', '京', '垓', '𥝱', '穣', '溝', '澗', '正', '載', '極', '恒河沙', '阿僧祇', '那由他', '不可思議', '無量大数'];
var span = document.getElementsByTagName('*');
for(var i=0;i<span.length;i++){
if(span[i].className.match(re)){
var nums = span[i].innerHTML.replace(/(\d)(?=(\d\d\d\d)+$)/g, "$1,").split(",").reverse();
var data = '';
for(var j=0;j<nums.length;j++){
if(!nums[j].match(/^[0]+$/)){
data = nums[j].replace(/^[0]+/g, "") + keta[j] + data;
}
}
span[i].innerHTML = data;
}
}
</script>


匿名質問者さんのコメント
2度も回答いただきありがとうございました。

2 ● 匿名回答2号

やってみた。

 <script type="text/javascript">
 <!--
 var num = 1234567890123457890123456;
 var unit_array = new Array( '円', '万','億', '兆', '京' );
 num *= 1.0; // 整数のままだと丸め誤差が起こるみたいなので入れました。
 var text = '';
 for ( var i = unit_array.length - 1; i >= 0; i-- ) {
 var num2 = Math.floor( num / Math.pow( 10, i * 4 ) );
 if ( num2 > 0 ) {
 text += num2 + unit_array[i];
 num = num % Math.pow( 10, i * 4 );
 }
 }
 document.write( text );
 //-->
 </script>

匿名質問者さんのコメント
ありがとうございました。

3 ● 匿名回答3号
<script type="text/javascript">
<!--
function myNum2ja(num){
 var unit_array = new Array('京','兆','億','万');
 var sNum = ""+num;
 if (sNum.length > 16) return('Error!: Overflow');
 while(sNum.length < 16) sNum='0'+sNum;
 var text = '';
 for ( var i = 0; i < unit_array.length; i++) {
 var num2 = parseInt(sNum.substring(i*4,(i+1)*4),10);
 if ( num2 > 0 ) text += num2 + unit_array[i];
 }
 return(text);
}
var num = 10000;
alert( myNum2ja(num) );
num = 12345;
alert( myNum2ja(num) );
num = 1000000000;
alert( myNum2ja(num) );
num = 1234567890123456;
alert( myNum2ja(num) );
num = 9999999999999997; // ここでエラー!
alert( myNum2ja(num) );
num = "9999999999999997"; // これならOK!
alert( myNum2ja(num) );
//-->
</script>

やり方を変えてみましたが、エラーが出ます。最後の7が6になってしまいます。
Overflowしているからと思うので、numは初めから文字列で与えないといけないのかな。


匿名質問者さんのコメント
ありがとうございました。

4 ● 匿名回答1号
ベストアンサー

No.1を要望の挙動に。

<script>
var num = 100000000000;
var keta = ['万', '億', '兆', '京'];
var nums = String(num).replace(/(\d)(?=(\d\d\d\d)+$)/g, "$1,").split(",").reverse();
var data = '';
for(var i=0;i<nums.length;i++){
if(!nums[i].match(/^[0]+$/)){
data = nums[i].replace(/^[0]+/g, "") + keta[i] + data;
}
}
alert(data);
</script>

匿名質問者さんのコメント
ありがとうございます。今回希望通りの動作になりましたのでベストアンサーとさせて頂きました。
関連質問

●質問をもっと探す●



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