今天我的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
答案 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"