匿名質問者

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

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

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2013/01/22 18:10:28

ベストアンサー

匿名回答1号 No.4

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>
匿名質問者

ありがとうございます。今回希望通りの動作になりましたのでベストアンサーとさせて頂きました。

2013/01/22 18:11:25

その他の回答3件)

匿名回答1号 No.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度も回答いただきありがとうございました。

2013/01/22 18:12:39
匿名回答2号 No.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>
匿名質問者

ありがとうございました。

2013/01/22 18:12:09
匿名回答3号 No.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は初めから文字列で与えないといけないのかな。

匿名質問者

ありがとうございました。

2013/01/22 18:12:04
匿名回答1号 No.4

ここでベストアンサー

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>
匿名質問者

ありがとうございます。今回希望通りの動作になりましたのでベストアンサーとさせて頂きました。

2013/01/22 18:11:25

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

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

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

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

回答リクエストを送信したユーザーはいません