为什么Math.round(-0.2)返回-0?

时间:2014-03-26 01:16:01

标签: javascript

今天我的Javascript有点问题:

我有一组值,例如:

US         11.3123
Brazil     -0.2291
UK          0.4501

我希望显示没有小数位,舍入值,因此它将显示为:

US         11
Brazil     -0
UK          0

所以,问题在于巴西正在展示" -0"而不是" 0"。

好吧,我可以轻松解决问题:

html += '<tr><td>' + arr[i].Country + '</td>' +
            '<td>' + d3.format(arr[i].Value || 0, 0) + '</td></tr>';

为什么Math.round会返回-0而不是0?

更新

我使用D3.js format function,它将JavaScript行为传输到输出。但是,由于在控制台中的事实,我有这个疑问:

Math.round(-0.02)
> -0

2 个答案:

答案 0 :(得分:8)

来自ecmascript定义:http://es5.github.io/#x15.8.2.15

If x is NaN, the result is NaN.
If x is +0, the result is +0.
If x is −0, the result is −0.
If x is +∞, the result is +∞.
If x is −∞, the result is −∞.
If x is greater than 0 but less than 0.5, the result is +0.
If x is less than 0 but greater than or equal to -0.5, the result is −0.
  

注2   Math.round(x)的值与值相同   Math.floor(x + 0.5),除非x是-0或小于0但更大   大于或等于-0.5;对于这些情况,Math.round(x)返回-0,但是   Math.floor(x + 0.5)返回+0。

答案 1 :(得分:5)

  

问题在于巴西正在展示&#34; -0&#34;而不是&#34; 0&#34;。

绝对不能。虽然@JoeFrambach和@Amdan解释了为什么JS确实区分了+0和-0,但这不能从你的代码中输出(除非你的JS引擎存在缺陷)。引用EcmaScript §9.8.1 ToString Applied to the Number Type

  

2。如果[数字]为+0−0,请返回字符串"0"

没有减号:

Math.round(-0.2) + '' == "0"
Math.round( 0.2) + '' == "0"