3 回答
TA贡献1827条经验 获得超7个赞
因为Java使用IEEE浮点算术标准(IEEE 754)来定义-0.0和使用它。
可表示的最小数字在次正规有效位中没有1位,并且被称为正负零,由正负号确定。它实际上表示在零到相同符号的最小可表示非零数字之间的范围内将数字四舍五入为零,这就是为什么它有一个符号,以及为什么它的倒数+ Inf或-Inf也有一个符号。
您可以通过添加解决特定的问题 0.0
例如
Double.toString(value + 0.0);
请参阅:Java浮点数复杂度
负零
...
(-0.0)+ 0.0-> 0.0的 运算
--
“-0.0”是当在负浮点数浮点运算结果,以便接近0所产生它不能正常地表示。
TA贡献1995条经验 获得超2个赞
原始浮点值为什么可以是-0.0?
浮点数使用IEEE 754标准存储在内存中,这意味着可能存在舍入错误。您永远无法使用有限的资源存储无限精度的浮点数。
您永远不要测试浮点数是否等于==,即不要写这样的代码:
if (a == b)
在哪里a和b在浮动。由于舍入错误,这两个数字可能以不同的值存储在内存中。
您应该定义要使用的精度:
private final static double EPSILON = 0.00001;
然后根据您需要的精度进行测试
if (Math.abs(a - b) < epsilon)
因此,在您的情况下,如果要测试给定精度的浮点数等于零:
if (Math.abs(a) < epsilon)
而且,如果要在GUI中输出数字时格式化数字,则可以查看以下文章和NumberFormat类。
添加回答
举报