我读了一些其他的代码,下面有一些代码。我想知道这个方法对num做了什么?
formatNumber: function (num, digit) {
var pow = Math.pow(10, digit || 5);
return Math.round(num * pow) / pow;
}
我跑的时候BTW
formatNum(11.267898,5),它给了我11.2679,这样可以吗?
答案 0 :(得分:0)
本质上,该函数以一定的精度返回数字。精度为digit
,如果没有提供则为5。
返回部分实际上从右到左带来了许多值(等于digit
)小数,然后丢弃其余的值,最后再次划分以使原始值降低到digit
的精度。
关于BTW编辑 -
获得的值是正确的。见下面的详细信息
当您致电formatNum(11.267898, 5)
时,您要求数字精确到5位精度,而您的数字精确到6位数 - precision
是点后的数字。
现在,当您拨打num * pow
时,号码变为1126789.8
,当您绕过此号码时,它会舍入到最接近的整数11.26790
。最后,当你将它除以pow
(100000
)时,数字变为11.2679,丢弃最后0,因为精确度为零尾零。
答案 1 :(得分:0)
这是一段非常糟糕的代码。
首先,命名约定与代码完全不符。
函数名称formatNumber()
表示格式化一个数字。换句话说,它应该生成一个数字的字符串表示,以某种方式格式化。但是函数不会这样做,它会返回另一个数字。这是没有意义的。数字没有格式,它们只是数字。
参数名称digit
听起来像是包含一个数字。但事实并非如此。它包含要将数字四舍五入的数字 count 。当你为事物命名时,单数和复数都很重要!
情况变得更糟。
正如您所发现的,该功能甚至不起作用。在您的示例中,formatNum(11.267898,5)
会返回数字11.2679
。当你要求五个时,为什么它会给你四位数?你期待的结果是11.26790
,不是吗?好吧,当然,如果我们谈论的是数字,这与11.2679
相同。但是当你想要五位数时,那对你有什么好处呢?
或者采取一个非常简单的例子:formatNumber(1,2)
。您可能希望生成1.00
,但它会生成1
。当然这实际上是相同的值,但没有按照你想要的方式格式化。
现在我们从荒谬到崇高。
JavaScript总是有一个内置函数,完全我们期望formatNumber()
做的事情:number.toFixed(digits)
。这会进行正确的舍入,并始终返回您要求的小数点后的位数。当然,为了能够做到这一点,它返回一个字符串,而不是一个数字。
如果我们使用.toFixed()
尝试这些示例,它们会按预期工作:
(11.267898).toFixed(5)
返回字符串"11.26790"
。
(1).toFixed(2)
返回"1.00"
。
依此类推,几乎任何你可以抛出的东西。 (它放弃了幅度太大的数字,而是使用指数表示法。)
请注意,这些示例中第一个数字周围的括号只是为了避免语法错误;在大多数情况下,你会使用一个变量而不需要它们,例如
myNumber.toFixed(2)
总而言之,formatNumber()
不仅不会做它所说的而且没有任何有用的东西,它首先从来不需要!