Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 将1000以上的数字转换为1k等的函数AS3_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 将1000以上的数字转换为1k等的函数AS3

Actionscript 3 将1000以上的数字转换为1k等的函数AS3,actionscript-3,flash,Actionscript 3,Flash,G'day 函数已编码,但它位于舞台框架上。我想把它转换成一个更动态的函数,这样我就可以在我所有的文本字段上调用它了 代码如下: function numtolet():void { output.text = String(int(earner * 100) / 100); if (earner >= 1000 && earner < 1000000) { output.text = String(int((earner/1

G'day

函数已编码,但它位于舞台框架上。我想把它转换成一个更动态的函数,这样我就可以在我所有的文本字段上调用它了

代码如下:

function numtolet():void
{
    output.text = String(int(earner  * 100) / 100);
    if (earner >= 1000 && earner < 1000000)
    {
        output.text = String(int((earner/1000)  * 100) / 100 + "k");
    }
    else if (earner >=1000000 && earner < 1000000000)
    {
        output.text = String(int((earner/ 1000000) * 100 ) / 100 + " M");
    }
}
函数numtolet():void
{
output.text=字符串(int(earner*100)/100);
如果(收入者>=1000和收入者<1000000)
{
output.text=String(int((earner/1000)*100)/100+“k”);
}
否则,如果(收入者>=1000000和收入者<100000000)
{
output.text=字符串(int((挣人/1000000)*100)/100+“M”);
}
}
我希望将“output.text”部分转换为一个变量,该变量根据调用函数的文本字段和文本字段读取的变量的“earner”进行更改

干杯


-Aidan。

您可以使用更改事件执行此操作:

output.addEventListener(Event.CHANGE, numtolet);

function numtolet(e:Event):void
{
    output.text = String(int(earner  * 100) / 100);
    if (earner >= 1000 && earner < 1000000)
    {
        output.text = String(int((earner/1000)  * 100) / 100 + "k");
    }
    else if (earner >=1000000 && earner < 1000000000)
    {
        output.text = String(int((earner/ 1000000) * 100 ) / 100 + " M");
    }
}
output.addEventListener(Event.CHANGE,numtolet);
函数numtolet(e:事件):无效
{
output.text=字符串(int(earner*100)/100);
如果(收入者>=1000和收入者<1000000)
{
output.text=String(int((earner/1000)*100)/100+“k”);
}
否则,如果(收入者>=1000000和收入者<100000000)
{
output.text=字符串(int((挣人/1000000)*100)/100+“M”);
}
}
这将使函数在每次用户更改文本时运行,但您可能希望向函数添加一些条件(if),或使用变量跟踪当前编号。当数字转换为1k时,它如何知道在1000k时要做什么


请随时询问您是否需要这方面的帮助。

当您使用如Neguido所说的
更改
事件,并将侦听器添加到不同的文本字段时,您可以使用
e.target.text=
更改调用文本字段中的文本。
为每个文本字段指定不同的变量更为困难,因为您无法将额外的参数传递到事件处理程序中,也无法将自己的变量/属性添加到文本字段中。您可以将每个文本字段粘贴到父MovieClip中,然后在其中创建变量,如
MovieClip1.earner=0
,并使用
e.target.parent.earner
检索值。您还可以为TextField类编写一个动态扩展,在其中添加自定义变量。或者,您可以在事件处理程序中使用
switch
语句为不同的调用者使用不同的变量。

您最好将函数编写为适当的函数,该函数可以
返回
字符串
值,以分配给
文本
属性或在其他地方使用。此外,如果需要,您应该使用易于扩展到更大前缀的模式。比如说,我发现一个游戏使用了
W
前缀,这是一个超出了常见的“yotta”前缀的游戏,并且还有一组后续前缀。所以,你应该这样设计一个函数:

function numtolet(x:Number):String {
    const prefixes:Vector.<String> = Vector.<String>(["","k","m","g","t"]); 
    // add more to taste. Empty prefix is used if the number is less than 1000
    var y:Number=x;
    var i:int=1;
    // provided x>0, if not, store a minus somewhere and attach later
    while((y>=1000) && (i<prefixes.length)) {
        y=y/1000;
        i++;
    } 
    // there, you have just divided X by 1000 a couple of times and selected the prefix
    var s:String = y.toFixed(2)+prefixes[i-1];
    // if there was a minus, add it here: s="-"+s;
    return s;
}

这是我为其他东西编写的一个快速函数。通过添加另一个if语句并在数字上添加000,可以很容易地将其调整为更大的数字。它也不包括输出显示,但也可以很容易地添加。希望有帮助

通过numToLet(earner)调用函数

函数numToLet(x){
如果(x>10000000000000000){
x=x/10000000000000000
x=数量(x.toFixed(2));
返回x+“Quin”;
}
如果(x>100000000000000){
x=x/10000000000000
x=数量(x.toFixed(2));
返回x+“四边形”;
}
如果(x>10000000000){
x=x/10000000000
x=数量(x.toFixed(2));
返回x+“特里尔”;
}
如果(x>100000000){
x=x/100000000
x=数量(x.toFixed(2));
返回x+“Bil”;
}
如果(x>1000000){
x=x/1000000
x=数量(x.toFixed(2));
返回x+“密耳”;
}
如果(x<1000000){
x=数量(x.toFixed(2));
返回x;
}
}

或者,您可以使用键盘事件来检测按下的enter按钮。该功能在计时器事件(每1秒)后更改。我还没有完成转换,我计划在未来至少再升十级。我正在寻找一个更通用的函数,它可以将任何一系列数字从任何变量转换为可读的数字,然后被各种文本字段使用。即使您只使用一个文本字段,也要确保仔细阅读此答案的第一部分,以备将来参考,Aidan。e.target变量增加了函数的全部用途,因为它们是“可重用的代码集”。正如@Scab所说,无论哪个TextField调用该事件,都可以使用该函数。为函数添加多功能性并尽可能保持整体编程整洁和最小化总是很好的,而且——我的意思是——永远不会让代码的多个部分做同样的事情。谢谢,我绝对可以使用e.target.text行。这正是我提出这个问题时所追求的。我对OOP和as3还是个新手,一直在寻找访问调用函数的文本字段的方法。为您的帮助干杯,Vesper,但是“function numtolet(x:Number):String{”返回编译器错误“构造函数无法指定返回类型”。这意味着,重命名该函数。此错误意味着
numtolet
是类的名称,名称与该类相同的函数应为其构造函数,并且这些函数不能返回值。更改了函数名称,但仍会出现错误。这意味着您在代码中混淆了某些内容。此函数应驻留在cla中ss description,嵌套在类中,但不嵌套在任何函数中。我说奇怪,除非我混淆了函数的语法。它是类中自己的函数。
output.text=numtolet(earner);
     function numToLet(x) {
        if (x > 1000000000000000000) {
            x = x / 1000000000000000000
            x = Number(x.toFixed(2));
            return x + "Quin"; 
        }
        if (x > 1000000000000000) {
            x = x / 1000000000000000
            x = Number(x.toFixed(2));
            return x + "Quad"; 
        }
        if (x > 1000000000000) {
            x = x / 1000000000000
            x = Number(x.toFixed(2));
            return x + "Tril"; 
        }
        if (x > 1000000000) {
            x = x / 1000000000
            x = Number(x.toFixed(2));
            return x + "Bil"; 
        }
        if (x > 1000000) {
            x = x / 1000000
            x = Number(x.toFixed(2));
            return x + "Mil"; 
        }
        if (x < 1000000) {
            x = Number(x.toFixed(2));
            return x; 
        }

    }