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
どなたかご教授お願いします。
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>
こんな感じでしょうか。
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度も回答いただきありがとうございました。
やってみた。
<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>
ありがとうございました。
<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は初めから文字列で与えないといけないのかな。
ありがとうございました。
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