Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Java在0前面打印一个负号,而没有符号的0是相等的,并且通常被认为是正确的?_Java - Fatal编程技术网

为什么Java在0前面打印一个负号,而没有符号的0是相等的,并且通常被认为是正确的?

为什么Java在0前面打印一个负号,而没有符号的0是相等的,并且通常被认为是正确的?,java,Java,在java中,以下代码的输出是0.0,-0.0,-0.0. 这些不同答案的原因是什么 System.out.print((0.0 % -1)+","+(-0.0 % 1)+","+ (-0.0 % -1)); 当你将一个数除以它时,模运算符只取余数 将0除以-1得到0,因此结果为0 浮点和double实际上知道-0和+0之间的区别,所以当取-0的余数时得到-0,因为它仍然是介于0和1(或-1)之间的有效数字 这是浮点数工作方式的一个怪癖,也是0的特殊属性的一个怪癖,因为它对其他数字不适用: S

在java中,以下代码的输出是
0.0,-0.0,-0.0.
这些不同答案的原因是什么

System.out.print((0.0 % -1)+","+(-0.0 % 1)+","+ (-0.0 % -1));

当你将一个数除以它时,模运算符只取余数

将0除以-1得到0,因此结果为0

浮点和double实际上知道-0和+0之间的区别,所以当取-0的余数时得到-0,因为它仍然是介于0和1(或-1)之间的有效数字

这是浮点数工作方式的一个怪癖,也是0的特殊属性的一个怪癖,因为它对其他数字不适用:

System.out.println((0.0 % -1)+","+(-0.0 % 1)+","+ (-0.0 % -1));

System.out.println((0 % -1)+","+(-0 % 1)+","+ (-0 % -1));

System.out.println((3 % -1)+","+(-3 % 1)+","+ (-3 % -1));
显示:

0.0,-0.0,-0.0 
0,0,0 
0,0,0
由于要求提供参考:

浮点在IEEE_754-1985中定义:

整个维基百科页面都在讨论负零:

这也至少部分地解释了模为什么起作用:

根据IEEE 754标准,负零和正零应与常用(数值)比较运算符(如C和Java的==运算符)进行相等的比较


由于模运算产生一个大于等于0且小于给定值的数,因此-0已经满足了>=要求(因为-0==0),运算可以立即结束。

因为IEEE float既有正零值也有负零值。

因为
float
支持。更改标志会导致信息丢失,尽管信息可能毫无意义

所以基本上它归结为一个显示问题,而不是一个数据表示;如果需要“正确”的格式副本,请为输出提供格式字符串。这适用于任何您不喜欢默认设置的场景
ToString()
表示。

原因与规则有关。具体来说,因为浮点数不是“无限”精确的,它“简化”了对复数的处理。

您实际期望的输出是什么?我期望的是0.0,0.0,0.0,所以问题是,“当无符号的
0
相等且更普遍地被认为是正确的时,为什么Java在
0
前面打印负号?”一个非常相关的方面:这是Java独有的还是其他语言表现出相同的行为?因此,(如果我可以在这里戴上水晶球帽),因为
float
实际上支持负零,Java的设计者认为,不使用符号可能会降低风险,与其改变它,不如引用规范中描述这种行为的部分(浮动和
%
操作符)?@RobertHarvey我认为你可以责怪IEEE的人(事实上是754委员会的人)@ElliottFrisch:不。如果Java设计师愿意的话,他们可以决定将所有类型的零显示为正零。但是有一些差异,在某些领域变得很重要。