根据这个java.sun页面 ==是Java中浮点数的相等比较运算符.
但是,当我输入以下代码时:
if(sectionID == currentSectionID)
Run Code Online (Sandbox Code Playgroud)
进入我的编辑器并运行静态分析,我得到:"JAVA0078浮点值与==相比"
使用==比较浮点值有什么问题?这样做的正确方法是什么?
当我开始使用相等运算符比较两个浮点值时,我使用的代码审查工具会引用以下内容.什么是正确的方法以及如何做到这一点?是否有一个帮助函数(commons-*),我可以重用它?
描述
无法使用equals(==)运算符比较浮点值
说明
通过使用等式(==)或不等式(!=)运算符来比较浮点值并不总是准确的,因为舍入错误.
建议
比较两个浮点值以查看它们是否接近值.
float a;
float b;
if(a==b)
{
..
}
Run Code Online (Sandbox Code Playgroud) 在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");
}
Run Code Online (Sandbox Code Playgroud)
打印"c不是3.6".
我对超过3位小数的精度感兴趣(#.###).我如何处理这个问题来乘以浮点数并可靠地比较它们?