基本浮点值如何为-0.0?这意味着什么?

原始浮点值怎么可能是-0.0?这意味着什么?

我可以取消该功能吗?


当我有:


  float fl;  

然后fl == -0.0返回true,也是如此fl == 0。但是当我打印时,它会打印-0.0。


慕勒3428872
浏览 434回答 3
3回答

慕仙森

因为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所产生它不能正常地表示。

拉风的咖菲猫

原始浮点值为什么可以是-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类。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java