• ベストアンサー

料金計算→3桁でカンマを入れたい

料金計算で合計の数字にカンマを入れたいと思います。何とか本を読み読みここまで来たのですが・・ on (press) { total = _root.pretotal.text; _root.pretotal.text = total.length; //文字数を取得 if (total.length>3) { _root.total.text = (total.substr(0, -3))+","+total.substr(-3); } } ↑これだと「3ケタ目にカンマを追加」だと思うので、12346,789となってしまいます。 どんどんカンマを追加するにはどうしたらういいのでしょうか。。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.2

次のように考えてはいかがでしょう。 1の位は、数値として数える時は最下位で、最初に着目する位なのですが、数字をひと続きの文字列として見た場合は最後の文字といえます。 for ループのループカウンタを工夫して、1の位、つまり最後の文字から順に1文字ずつ取り出し、作業用の変数にコピーします。 この時、ループカウンタとは別に、コピーした字数のカウントを別に取ります。 このカウンタを if 文で見て、3文字ごとに” , ”を挿入しながら、元の数字をコピーしていきます。 出来上がった文字列は、1の位が左に来ている、つまり数値の並び方が反転している状態になります。 例えば、元の数字が 1234567890 であれば、  098,765,432,1 このようになっています。 表示する時は、同様に for ループのカウンタを工夫して、出来上がった文字列を後ろから1文字ずつコピーし、順序を戻すという仕組みです。 例えば、オリジナルの金額が表示されているテキストフィールド”pre_total”と、カンマを入れた数字を表示するテキストフィールド”total”があるとします。 ボタンが押された時、pre_total に入力された数値に” , ”を入れ、total に表示するスクリプトは、大体、次のようになります。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください)  on(press)  {   org = new String( _root.pre_total.text );   temp = new String( "" );   //3桁ごとに”,”を挿入   cnt = 0;   for( i = org.length - 1 ; i >= 0 ; i-- , cnt++ )   {    //文字列の後ろから1文字ずつコピー    temp += org.charAt( i );    //3文字コピーするごとに”,”を挿入    if( cnt % 3 == 2 )    {     temp += ",";    }   }   //tempを逆方向に並べ替えて表示   //先頭に”,”が来ている場合は、最後の1つ前の文字からコピー   if( temp.charAt( temp.length - 1 ) == "," )   {    start_index = temp.length - 2;   }   else   {    start_index = temp.length - 1;   }   //tempの最後から順に1文字ずつコピー   total.text = "";   for( i = start_index; i >= 0 ; i-- )   {    total.text += temp.charAt( i );   }  } 3文字ごとに” , ”を挿入する仕組みについてですが。 元の金額の文字列を、最後から1文字ずつ切り取っていく際、cnt という変数で、ループカウンタとは別にカウントを取っています。 1文字目の時0、2文字目で1、3文字目で2・・・と変わり、3文字目の次には更に” , ”を追加します。 つまり、cnt が 2、5、8・・・の時” , ”を挿入することであり、cnt を3で割った余りが2である時に” , ”を挿入するといえます。 剰余は % 演算子を使って求めることができます。 例えば、元の金額が  123456 このように桁数が3の倍数だった場合、temp 中身は  654,321, と、先頭に” , ”が付いてしまいます。 そこで、temp の並びを反転させて表示する時に、temp 最後の文字が” , ”だった時は最後の文字の手前から、それ以外は最後の文字からコピーするようにしています。 まあ・・・ちょっと力技ですけど(^^;)、よろしければご参考までに。

banshee90
質問者

お礼

ご回答ありがとうございます。 お返事が遅くなってしまい申し訳ありませんでした。 分りやすいご説明と頂いたソースで試した所、うまく行きました!! しっかりカンマ付けされています。 重ねて、ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#35109
noname#35109
回答No.1

非常に原始的な方法ですが,良かったら参考にしてください。 変数「string」に入る数の桁を10桁までと仮定します。 それ以上になる場合は変更してください。 (「string」は「pretotal.text」の部分です。) on (press) { //フラグを立てて以下を10回繰り返す //変数「B1」~「B10」に「string」をバラして入れる A = "0"; while (Number(A)<=10) { A = Number(A)+1; set("B" add A, substring(string, A, 1)); } //もし10桁,7桁4桁目に何か入っていたら //C1~C3には "," を入れる if (Number(B10)<>Number("")) { C1 = ","; } if (Number(B7)<>Number("")) { C2 = ","; } if (Number(B4)<>Number("")) { C3 = ","; } //変数Dにはハイフン入りの数を入れる D = B10 add C1 add B9 add B8 add B7 add C2 add B6 add B5 add B4 add C3 add B3 add B2 add B1; } 以上をボタンのスクリプトとして書き込みます。

banshee90
質問者

お礼

ご回答ありがとうございます! バージョン等の記載がない、お返事が遅れたこと申し訳ございません。(あと度重なるタイムアウト) 遅れながらFLASH MX(6),WIN XPです。 上記を元にカスタマイズしたところ、スクリプトが原因でロードできない、 みたいな事を言われパブリッシュできませんでした・・・ でも、おっしゃりたい事は分りますし、ソースの短さも魅力的ですので、 引き続き試してみたいと思います!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 複数のダイナミックテキストに1000桁ごとのカンマの打ち方

    先日、1000桁ごとのカンマの入れ方を教えていただき、上手くいったのですが、複数のテキストボックスにカンマを打ちたいと思い、Array を使ったのですがうまくいきません。根本的に何かが違うのだと思いますが、何処が違うのか教えていただきたく投稿しました。 どうぞよろしく御願いします。 on (press) { 計算式が入っています my_array[1] = new Array( ninendrieki , sannendrieki , gonendrieki , yonendrieki ) my_array[2] = new Array( _root.gonendriekiQ.text , _root.yonendriekiQ.text , _root.ninendriekiQ.text , _root.sannendriekiQ.text ) org = new String( my_array[1] ) temp = new String( "" ); cnt = 0; for( i = org.length - 1 ; i >= 0 ; i-- , cnt++ ) { temp += org.charAt( i ); if( cnt % 3 == 2 ) { temp += ","; } } if( temp.charAt( temp.length - 1 ) == "," ) { start_index = temp.length - 2; } else{ start_index = temp.length - 1; } my_array[2] = ""; for( i = start_index; i >= 0 ; i-- ) { my_array[2] += temp.charAt( i ); } }

    • ベストアンサー
    • Flash
  • 3桁カンマを一斉に付けたい

    表があって、表の中の複数のテキストボックスに数値・文字を入れて、最後にボタンを押すと、数字のテキストボックスのみ3桁のカンマを入れたい。こういう便利なこと?をしたいのですが、新米にはむずかしい。

  • 変数の戻り値を作りたい

    戻り値を作ってみてるのですが、うまくいきません。 画像6枚入れたとして、ボタンに on (release) { cnt = cnt-2; } を作りましたが、1枚目のマイナスの値がないため、バグります。 ※多分小数点になりSTOP そこで、ボタンを足し算で合計にしてみたら、totalを超えると0に戻される為、1枚目にしか戻りません。 ifで制御しようと、ひとまず if (cnt>total-1) { cnt=total-1; } を追加したら、最初から常に6枚目が表示されてしまいます。 なぜ cnt>total-1 の方が勝ってしまうのでしょうか? ======================================================== cnt = -1; _root.total = this.childNodes[0].childNodes.length; if (cnt<total-1) { cnt++; } else { cnt = 0; } ========================================================

    • ベストアンサー
    • Flash
  • カンマの付け方

    ファンクションの中で記述した数式の結果に 三桁区切りでカンマをつけたいのですが、 どうすればよろしいのでしょうか。 lstArariYosan.value = Math.floor(lstUriageYosan.value.replace(",","") * lstArariRitu.value); 今は、こんな感じでカンマを外して計算しています。 計算結果を出した後、逆にカンマをつけてから 表示するようにしたいのですが、 何かいい方法はありますか? また、下記がカンマ編集のメソッドの様ですが、 これを使って表示しようとするとエラーになります。 function addComma(su) {  var ret="";  var fugou="";  if(su.length>0 && su.substring(0, 1) == "-") {    ret = su.substring(1, su.length);    fugou = "-";  } else { ret = su; }  if(ret.length>3){    for(i=3;i<ret.length;i+=4){    var moji=ret.substring(0,ret.length-i)+','+ret.substring(ret.length-i,ret.length);    ret = moji;  } } return (fugou + ret); }

  • JavaSの追加計算

    function keisan(){ // 設定開始 var price1 = document.form1.kazu.value; // 合計を計算 if (price1 < 10000) { var total = parseInt(price1)*44/10000; } else { var total = parseInt(price1)*45/10000; } else if // 設定終了 document.form1.field_total.value = total; // 合計を表示 } // --> </SCRIPT> 上記に追加で*22/10000の計算を入れたいのですがどうしたらいいのですようか? 初心者なので申し訳ございませんがご教授お願い致します。

  • 0で上の桁をうめる方法

    $no = 1; $total = sprintf("%4d",$no);#total=1; としたときに、 $totalの値は当然1になりますが、これを $totalの値が0001になるようにする『シンプル』でいい方法は無いでしょうか。都合により、sprintf関数は除外しかねます。でも除外した方法でもいいです。 if文で、 $noが一桁のときは、$total = "000" . "$no"; $noが2桁のときは… という方法以外でお願いします。なぜかというと、%5d とか%7dとかしたときにも対応できるようにしたいからです。それと当然$noの値が111であれば、%4dであれば、$totalの値は0111です。 すこしわがままですが、よろしくお願いします。

    • ベストアンサー
    • CGI
  • エクセル:桁区切り「カンマ」でセルが分割されて貼り付けされてしまう

    仕事で社内のシステムから売上の情報をコピーしてエクセルに貼り付けて処理をしようとしたところ、コピーした数字に「桁区切りのカンマ","」がある関係で、 たとえば 1,234,567 という数字が 1 と 234 と 567 とセルが分割されて貼り付けられてしまいます。 CSVファイルのカンマ区切りデータと同じように情報がカンマで分割されてしまっているようなのですが、貼り付けの際に分割されないようにするにはどうしたらよいでしょうか? ちなみに、これらデータはスペースで区切られているので一度テキストファイルに保存して、CSVを開くときの区切り文字の設定を「スペース」に設定すればうまく開くのはわかるのですが、コピーして即貼り付けのときにこのようになることを回避する方法はあるのでしょうか?マクロを組んでも構いません。 どうぞ、ご教授、宜しくお願いします。

  • 変数の内容(桁区切り金額)をカンマ無しにする方法は?

    現在、フリーのショッピングカートCGIを利用しています。 今回、カード決済を導入する事になりました。 そこで、このカートcgiの中から金額をカード決済サイトへformで渡す必要が出てきました。 cgi内部では、金額は $total という変数で保持されています。 この変数をカード決済サイトへformを使って送ろうとすると、$totalの内容が例えば「5,500」のように桁区切り付きで渡されてしまうため、カード決済サイト側でエラーとなってしまいます。 カード決済サイトのエラーメッセージは、 「半角数字以外の文字が含まれています」です。 カートcgiから$totalをブラウザにprintしてみても、やはり「5,500」のようにカンマが入っています。 このカンマをなくし、「5500」という数字のみの形で例えば$newのような新しい変数に格納したのですが、私の技術不足のため思うようにいきません。 どなたかご教授下さい。 どうか宜しくお願い致します。

    • ベストアンサー
    • CGI
  • now loding.......

    onClipEvent (load) { total = _root.getBytesTotal(); } onClipEvent (enterFrame) { loaded = _root.getBytesLoaded(); percent = int(loaded/total*100); text = " "+percent+"%"; gotoAndStop(percent); if (loaded == total) { _root.gotoAndPlay(2); } } と、いうスクリプトが記述されているのですが、すべてダウンロードしないうちに再生してしまい、ナローバンドで見たときに、途中の動きがギクシャクしてしまいます。 このスクリプトをどういじれば解決するのでしょうか? ご教授くだされば幸いです。

  • JavaScriptを使った計算フォーム

    JavaScriptを使った計算フォームで質問です。 人数をテキストボックスに入力し、そのあと項目を選ぶと計算がされるようにしたいのですが ラジオボタンが持っているvalueを取り出せません。 下記の「←------???」と書いてあるところを何とかすれば完成だと思うのですが、 どなたか教えていただけないでしょうか? <script language="JavaScript" type="text/JavaScript"> function sjLeft(source,length) { if (source.length < length) { return (""); } return source.substr(0, length); } function sjReplace(source,start,length,target) { sjlen = source.length; if ((start > sjlen) || (start < 0)) { return String(""); } return String(sjLeft(source,start ) + target + source.substr(start+length, sjlen)); } function sjInsert( source, start, target) { return sjReplace(source,start,0,target); } function fcheck(obj) { s1_2value = ??? * new Number(document.form1.n1.value); ←------??? document.form1.s1_2.value = String(s1_2value); document.form1.total.value = s1_2value; return true; } </script> <form name="form1" method="POST"> <table width="400" border="1"> <tr> <td>人数</td> <td></td> <td><input type=text name=n1 size=8 onChange="fcheck(this);">人</td> <td></td> </tr> <tr> td><input name="n2" type="radio" value="13000" onChange="fcheck(this);">食事A</td> <td>\13,000</td> <td>×人数</td> <td><input name=s1_2 type=text size=8 readonly>円</td> </tr> <tr> <td colspan="2">&nbsp;</td> <td>総計</td> <td><input type=text readonly name=total size=10>円</td> </tr> </table> </form>