有人可以逐行解释这个AS3代码吗?

时间:2014-12-16 01:56:42

标签: actionscript-3 flash adobe

我遇到过这段代码,在一个数字中插入逗号,我打算在我的代码中使用它。它有效,但我想了解发生了什么。我正在写一个财富计算器,我需要在结果中添加逗号。

    function addComma(num: uint): String {
        var str: String = "";
        while (num > 0) {
            var tmp: uint = num % 1000;
            str = (num > 999 ? "," + (tmp < 100 ? (tmp < 10 ? "00" : "0") : "") : "") + tmp + str;
            num = num / 1000;
        }
        return str;
    }

它工作得很漂亮,但我想理解它,所以如果我愿意,我可以写类似的东西。

1 个答案:

答案 0 :(得分:0)

让我们逐行了解。

function addComma(num: uint): String {

这是不言自明的。它声明了一个名为addComma的函数,它接受一个参数num,这是一个无符号整数(uint)。该函数返回String

    var str: String = "";

这只是定义一个名为str的变量String并将其设置为空字符串。

    while (num > 0) {

当变量num大于0时循环。循环本身在每次迭代时将num除以1000,因此当函数完成时它最终会达到0。

        var tmp: uint = num % 1000;

这将创建一个名为tmp的临时变量,其num模数为1000.也就是说,它是num / 1000余数。这允许我们获取我们将要处理的数字的当前“段” - 数字中的最后三位数。

        str = (num > 999 ? "," + (tmp < 100 ? (tmp < 10 ? "00" : "0") : "") : "") + tmp + str;

这条线路有点棘手。它使用三元条件运算符。它就像一个浓缩的if块。基本上,a ? b : cif (a) { b; } else { c; }相同,但评估bc的值。

因此,我们将添加一个逗号和前导数字,但仅当数字大于999时(如果它更小,则没有更多数字要处理,所以我们不在乎)。如果tmp小于100,我们会添加前导零,否则我们可能会从1,23,40获得1023040之类的数字。

最后,我们在str中确定实际值和当前累计值,以获得新结果。

        num = num / 1000;

现在我们将num除以1000.由于num整数,因此这将向下舍入到最接近的整数。因此,所有小数部分都将被丢弃,我们将能够对下一组数字进行操作。

    }
    return str;

最后,我们返回最终结果。

}

就是这样!我们完成了。我甚至不确定这是否是针对给定问题的最佳解决方案,但它完成了工作。但是,如果我自己编写,我会先将数字转换为字符串,然后然后插入逗号。这样,您就不必担心插入前导零。