Javascript 为什么舍入-0.1返回-0

Javascript 为什么舍入-0.1返回-0,javascript,Javascript,在测试过程中,我发现了一些奇怪的东西 当我将负数四舍五入到0(-0.1,-0.01等)附近时,控制台中的返回值将是-0,而不是0。更奇怪的是,如果我对元素的文本设置相同的值,元素将显示0,而不是-0 演示: 有人能解释为什么会发生这种情况吗?任何帮助都将不胜感激 另外,我正在使用Chrome 33.0.1750.117版 JavaScript使用的数字类型(IEEE-754双精度浮点)具有“正”和“负”零的概念 -0.1的下一个最高整数是-0。在这种情况下,“最高”的意思是“朝向正无穷大”

在测试过程中,我发现了一些奇怪的东西

当我将负数四舍五入到
0
-0.1
-0.01
等)附近时,控制台中的返回值将是
-0
,而不是
0
。更奇怪的是,如果我对元素的文本设置相同的值,元素将显示
0
,而不是
-0

演示:

有人能解释为什么会发生这种情况吗?任何帮助都将不胜感激


另外,我正在使用Chrome 33.0.1750.117版

JavaScript使用的数字类型(IEEE-754双精度浮点)具有“正”和“负”零的概念

-0.1
的下一个最高整数是
-0
。在这种情况下,“最高”的意思是“朝向正无穷大”

发件人:

如果
x
小于
0
但大于或等于
-0.5
,则结果为
−0

-0
+0
在转换为字符串时都呈现为
0
。例如:

console.log(-0)         // 0 or -0 depending on what console you use
console.log(String(-0)) // 0 (always)
JavaScript使用,该规范认为
0
-0
在技术上是不同的。根据定义,负零可能是最接近这些值的整数

请注意,零既松散又严格地等于负零(
0==-0
0==-0


如果您不想看到
-0
IEEE双精度格式允许负零(不同于正0),可以通过执行
Math.abs(Math.round(x))
来解决此问题。这些值被认为几乎相等(例如,即使与
==
进行比较,它们也是相等的,
-0
不被认为“小于”
0
),但例如
1/0
无限
,而
1/-0
-无穷


在我看来,你不应该对这个语义进行太多的解读。

-0==0的计算结果是正确的。实际问题是“什么是-0,为什么它与0不同?”这是Javascript的一个怪癖。阅读更多信息。还有搜索:Javascript的怪癖是为了一些其他的乐趣,-0.1更接近-0而不是0…@Gareth,如果考虑
0!==0
那么我认为你的问题更合适。但既然它是平等的,我更好奇的是为什么它会发生在第一位。谢谢你花时间回答!我还注意到
0===-0
,我一定会接受你的建议,不要对此进行过多解读-我不知道你为什么被否决,我认为你的回答很有启发性!再次感谢您抽出时间回答!谢谢你的回答,TJ!我在你提供的文章中发现了一些非常有趣的东西<代码>请注意,同时存在正零和负零。为简洁起见,这些值也通过符号+0和+0引用,以便于说明−分别为0。(请注意,这两个不同的零值由程序表达式+0(或简单地说是0)和-0生成。)