将数字转换为1000到1k等的功能.AS3

时间:2014-11-09 12:19:10

标签: actionscript-3 flash

天儿真好,

该功能已编码,但它位于舞台帧上。我希望将它转换为更具动态性的功能,以便我可以在所有文本字段上调用它。

以下是代码:

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");
    }
}

我希望将'output.text'部分变成一个变量,该变量根据调用函数的文本字段和文本字段读取的变量的'earner'而变化。

干杯,

-Aidan。

4 个答案:

答案 0 :(得分:1)

您最好将您的函数编写为正确的函数,可以return String值分配给text属性或在其他地方使用。此外,如果需要,您应该使用可以轻松扩展为更大前缀的模式。比如说,我找到了一个使用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;
}

然后你就这样称呼它:

output.text=numtolet(earner);

答案 1 :(得分:0)

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

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");
    }
}

这将使每次用户更改文本时运行该函数,但您可能想要向函数添加一些条件(if),或者使用变量来保持追踪数量。当数字转换为1k时,它如何知道在1000k处做什么?

请随时询问您是否需要帮助。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这是我为其他事情写的快速功能。通过添加另一个if语句并将000添加到数字中,可以轻松地将其调整为更大的数字。它也不包括输出显示,但也可以很容易地添加。希望它有所帮助!

通过numToLet(收入者)调用该函数。

     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; 
        }

    }