在Java中,浮点运算没有精确表示。例如下面的java代码:float a = 1.2; float b= 3.0;float c = a * b; if(c == 3.6){ System.out.println("c is 3.6");} else { System.out.println("c is not 3.6");} 打印“ c不是3.6”。我对超过3位小数(#。###)的精度不感兴趣。如何处理这个问题以乘以浮点数并可靠地进行比较?
3 回答

拉莫斯之舞
TA贡献1820条经验 获得超10个赞
它是浮点数不应该像进行比较的一般规则(A == B) ,而是喜欢(Math.abs(a-b) < delta)在那里三角洲是一个小数目。
十进制形式的具有固定位数的浮点值不必具有二进制形式的固定位数。
另外为清楚起见:
虽然严格的==浮点数的比较具有非常小的实际意义上说,严格的<和>比较,相反,是一个有效的用例(实施例-当某些值超过阈值的逻辑触发:(val > threshold) && panic();)

qq_笑_17
TA贡献1818条经验 获得超7个赞
如果您对固定精度数字感兴趣,则应使用固定精度类型,例如BigDecimal
,而不是固有的近似(尽管精度高)类型,例如float
。关于堆栈溢出,有许多类似的问题,涉及许多语言,对此进行了更详细的介绍。
添加回答
举报
0/150
提交
取消