我遇到过这段代码,在一个数字中插入逗号,我打算在我的代码中使用它。它有效,但我想了解发生了什么。我正在写一个财富计算器,我需要在结果中添加逗号。
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;
}
它工作得很漂亮,但我想理解它,所以如果我愿意,我可以写类似的东西。
答案 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 : c
与if (a) { b; } else { c; }
相同,但评估为b
和c
的值。
因此,我们将添加一个逗号和前导数字,但仅当数字大于999时(如果它更小,则没有更多数字要处理,所以我们不在乎)。如果tmp
小于100,我们会添加前导零,否则我们可能会从1,23,40
获得1023040
之类的数字。
最后,我们在str
中确定实际值和当前累计值,以获得新结果。
num = num / 1000;
现在我们将num
除以1000.由于num
是整数,因此这将向下舍入到最接近的整数。因此,所有小数部分都将被丢弃,我们将能够对下一组数字进行操作。
}
return str;
最后,我们返回最终结果。
}
就是这样!我们完成了。我甚至不确定这是否是针对给定问题的最佳解决方案,但它完成了工作。但是,如果我自己编写,我会先将数字转换为字符串,然后然后插入逗号。这样,您就不必担心插入前导零。