- ベストアンサー
計算の結果に1000区切り カンマを付けたいのですが
計算の結果をダイナミックテキストに出力するとき、 結果が1000000だったら1,000,000と100区切りでカンマを付けて表示させたいのですが、どうすれば良いでしょうか? 宜しく御願い申し上げます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ダイナミックテキストのテキストフィールドに gonendriekiQ とインスタンス名を付けて、 gonendrieki = 1234567880 + 10; このような計算式の後に、#1で補足していただいたスクリプトをコピーして試してみましたが、カンマが挿入されて表示されました。 スクリプトには、特に問題はないようです。 よくある原因は、変数名やテキストフィールドの名前、階層の指定が違っていて、スクリプトで制御するターゲットを正確に指定できていないという些細な間違いです。 「プロパティ」パネルの「変数:」の項目に gonendrieki と設定しておくと、テキストフィールドのインスタンス名とスクリプト内で使っている名前が違うものになっていたとしても、とりあえず、カンマが付いていない状態の計算結果は表示されます。 「変数:」の項目を空白にすると、どのようになりますでしょうか? スクリプトでは text プロパティ(テキストフィールドに表示する内容を管理しているプロパティ)を直接書き換えているので、変数名を指定しなくても表示が更新されるはずです。 これが、変数を指定しなくなった途端に何も表示されなくなるようならば、スクリプトで使われているインスタンス名と実際のインスタンス名が一致していない、あるいは階層などの指定が違っているといった原因が考えられるかと思います。 それから、スクリプトはおそらくボタンなどに設定していらっしゃると思いますが。 テキストフィールドがこのボタンと同じフレームにないと、テキストフィールド gonendriekiQ は未定義ということになり、カンマを入れた文字列は表示されなくなります。 例えば、フレーム1にボタン、フレーム2にテキストフィールドを置くと、ボタンに設定されたスクリプトが実行される時点では、gonendriekiQ はまだ存在していません。 ですから、 gonendriekiQ.text += temp.charAt( i ); としてダイナミックテキストの内容を更新しようとしても、この処理は失敗してしまいます。 つまり、ボタンのスクリプトが実行される時には、gonendriekiQ がステージに存在していなければならないということです。 テキストフィールドがボタンよりも後のフレームで登場するのならば、フレームをまたいで情報を伝えられるようにする工夫が必要です。 簡単な方法としては、変数を1つ用意して、フレーム2にあるテキストフィールドではその変数の内容を表示するといった方法があります。 例えば、rieki_Q という変数で内容を伝えるとしますと、最終的にカンマを入れた文字列を作る処理は次のように変わります。 //tempの最後から順に1文字ずつコピー rieki_Q = ""; for( i = start_index; i >= 0 ; i-- ) { rieki_Q += temp.charAt( i ); } 元の数値にカンマを入れた文字列は、変数 rieki_Q に入ります。 フレーム2で gonendriekiQ が登場したら、「変数:」の項目に rieki_Q を入れるか、もしくは text プロパティを利用して gonendriekiQ.text = rieki_Q; このようなスクリプトを設定することで、フレーム1で処理された文字列を gonendriekiQ に表示できます。 原因としては、このくらいしか思いつかないのですが・・・ それでも直らないようでしたら、もう少し詳しい状況を補足してください。
その他の回答 (1)
- DPE
- ベストアンサー率85% (666/776)
数値を文字列として扱い、1の位(最後の文字)から見て3文字ごとにカンマを挿入しながら新しい文字列を作り、これを最後の文字から順に表示する・・・という方法はいかがでしょう。 この方法は、以前、別の質問でご紹介しておりますので、よろしければご参照ください。 ・料金計算→3桁でカンマを入れたい http://okweb.jp/kotaeru.php3?q=1256119 上記の質問では、ダイナミックテキストに表示されている数字にカンマを入れるとのことでしたので、元の数字はダイナミックテキストに表示されている内容から取得しています。 (テキストフィールドのインスタンス名.text という部分が、テキストフィールドに表示される内容を参照している部分です) 計算の結果をテキストフィールドに表示していない状態でカンマを入れたい時は、 org = new String( _root.pre_total.text ); この _root.pre_total.text の部分を、計算の結果が入っている変数に変更してください。 例えば、num という変数で計算の結果を管理しているのでしたら、 org = new String( num ); このようになります。 最終的にダイナミックテキストに出力しているのは total.text += temp.charAt( i ); この部分です。 total.text を、表示用のダイナミックテキストのインスタンス名.text に変更してください。
補足
早速のご解答有難う御座います。 前回にも同じ質問があったんですね 調べず質問してしまいすみませんでした。 以下のように記入したところ エラーは表示されないのですが、 答えにカンマが挿入されませんでした。 計算式と一緒に書いているのでだめなんでしょうか? お暇な時で結構ですのでどうぞ宜しく御願い申し上げます。 変数がgonendriekiで インスタンス名がgonendriekiQ に設定しています。 on (press) { 計算式を書いてます org = new String( gonendrieki); 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; } gonendriekiQ.text = ""; for( i = start_index; i >= 0 ; i-- ) { gonendriekiQ.text += temp.charAt( i ); } }
お礼
どうもありがとう御座います。 ご指摘の通り、階層が違っていました。 よくチェックしないとだめですね 今回本当に丁寧に教えて頂きとても勉強になりました。 フレームが違う場合も是非試してみたいと思います。 本当に有難う御座いました!!