Actionscript 3 AS3 Flash cs6如何使数字带有逗号?
我正在制作一个游戏,当你点击怪物时,你的分数得到+1。但当你的分数超过1000分时,我希望是1000分,而不是1000分。我不知道如何做到这一点,因为我还没有学会多少动作脚本。我在字体中嵌入了数字和标点符号。以下是我目前的代码:Actionscript 3 AS3 Flash cs6如何使数字带有逗号?,actionscript-3,flash-cs6,dynamic-text,Actionscript 3,Flash Cs6,Dynamic Text,我正在制作一个游戏,当你点击怪物时,你的分数得到+1。但当你的分数超过1000分时,我希望是1000分,而不是1000分。我不知道如何做到这一点,因为我还没有学会多少动作脚本。我在字体中嵌入了数字和标点符号。以下是我目前的代码: var score:Number = 0; Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; Monster.addEventListener(TouchEvent.TOUCH_TAP, fl_TapHa
var score:Number = 0;
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
Monster.addEventListener(TouchEvent.TOUCH_TAP, fl_TapHandler);
function fl_TapHandler(event:TouchEvent):void
{
score = score + 1;
Taps_txt.text = (score).toString();
}
非常感谢您的帮助。要用逗号显示
分数,您可以这样做:(注释在代码内)
编辑:
要支持大于999.999的数字,可以执行以下操作:
function fl_TapHandler(event:MouseEvent):void
{
score = score + 1;
score_str = score.toString();
Taps_txt.text = add_commas(score_str);
}
function add_commas(nb_str:String):String {
var tmp_str:String = '';
nb_str = nb_str.split('').reverse().join('');
for(var i = 0; i < nb_str.length; i++){
if(i > 0 && i % 3 == 0) tmp_str += ',';
tmp_str += nb_str.charAt(i);
}
return tmp_str.split('').reverse().join('');
/*
gives :
1234 => 1,234
12345 => 12,345
123456 => 123,456
1234567 => 1,234,567
12345678 => 12,345,678
123456789 => 123,456,789
1234567890 => 1,234,567,890
*/
}
函数fl\u TapHandler(事件:MouseEvent):void
{
分数=分数+1;
score_str=score.toString();
Taps_txt.text=添加逗号(score_str);
}
函数add_逗号(nb_str:String):String{
var tmp_str:String='';
nb_str=nb_str.split(“”).reverse().join(“”);
对于(变量i=0;i0&&i%3==0)tmp_str+=',';
tmp_str+=nb_str.charAt(i);
}
返回tmp_str.split(“”).reverse().join(“”);
/*
给予:
1234 => 1,234
12345 => 12,345
123456 => 123,456
1234567 => 1,234,567
12345678 => 12,345,678
123456789 => 123,456,789
1234567890 => 1,234,567,890
*/
}
希望能对您有所帮助。这可能不是最优雅的方法,但我编写了一个函数,它将返回用逗号格式化的字符串
public function formatNum(str:String):String {
var strArray:Array = str.split("");
if (strArray.length >= 4) {
var count:uint = 0;
for (var i:uint = strArray.length; i > 0; i--) {
if (count == 3) {
strArray.splice(i, 0, ",");
count = 0;
}
count++;
}
return strArray.join("");
}
else {
return str;
}
}
我在一些相当大的数字上测试了它,它似乎工作得很好。这个数字没有上限,所以
trace (formatNum("10000000000000000000"));
将输出:
100000000000000000
所以在你的例子中,你可以这样使用它
Taps_txt.text = formatNum(String(score));
(这是隐式转换类型,而不是显式地使用toString();
,但这两种方法都可以。转换只是在函数调用中看起来更整洁一些)您可以这样做:
function affScore(n:Number, d:int):String {
return n.toFixed(d).replace(/(\d)(?=(\d{3})+\b)/g,'$1,');
}
trace(affScore(12345678, 0)); // 12,345,678
使用该类:
这不起作用,因为100万显示为1000000而不是1000000。@user3406023当然,旧代码不支持大于999.999的数字,我编辑了我的答案来完成此操作。对不起,我是想评论其他人的答案而不是你的@阿克莫佐很有趣,但很复杂。看看格雷厄姆或我的答案。@格雷厄姆这是最好的答案。
function affScore(n:Number, d:int):String {
return n.toFixed(d).replace(/(\d)(?=(\d{3})+\b)/g,'$1,');
}
trace(affScore(12345678, 0)); // 12,345,678
import flash.globalization.NumberFormatter;
var nf:NumberFormatter = new NumberFormatter("en_US");
var numberString:String = nf.formatNumber(1234567.89);
trace("Formatted Number:" + numberString);
// Formatted Number:1,234,567.89