为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕勒3428872 2019-12-15 16:12:54
原始浮点值怎么可能是-0.0?这意味着什么?我可以取消该功能吗?当我有:  float fl;  然后fl == -0.0返回true,也是如此fl == 0。但是当我打印时,它会打印-0.0。
查看完整描述

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



查看完整回答
反对 回复 2019-12-16
?
拉风的咖菲猫

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类。



查看完整回答
反对 回复 2019-12-16
  • 3 回答
  • 0 关注
  • 433 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信