以下代码片段对num有什么作用?

时间:2015-07-11 07:37:51

标签: javascript

我读了一些其他的代码,下面有一些代码。我想知道这个方法对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,这样可以吗?

2 个答案:

答案 0 :(得分:0)

本质上,该函数以一定的精度返回数字。精度为digit,如果没有提供则为5。

返回部分实际上从右到左带来了许多值(等于digit)小数,然后丢弃其余的值,最后再次划分以使原始值降低到digit的精度。

关于BTW编辑 -

获得的值是正确的。见下面的详细信息

当您致电formatNum(11.267898, 5)时,您要求数字精确到5位精度,而您的数字精确到6位数 - precision是点后的数字。

现在,当您拨打num * pow时,号码变为1126789.8,当您绕过此号码时,它会舍入到最接近的整数11.26790。最后,当你将它除以pow100000)时,数字变为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()不仅不会做它所说的而且没有任何有用的东西,它首先从来不需要!