本文主要是介绍两个浮点数值的比较,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
因为以前学习过 C 语言,所以对于 java 的数据类型结构这一块就略过了,不过今天在看书的时候偶然间看到了一个关于浮点数比较的问题,相信有很多同学在学习数据类型这一块都不是很仔细,于是写个博客提出来,权当是做个笔记吧。
double x = 1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1;
x 的结果会是多少呢?一开始我很笃定,x = 0.5。但事实真的是这样么?因为浮点类型和双精度类型的数据都不是精确的,所以 x 并不是精确的等于 0.5,而是 0.5000000000000001。所以,直接拿 x 和 0.5 比较肯定是会出问题的。那么问题来了,应该如何比较两个浮点数的值是不是相等的呢?
一般的方法肯定是行不通的,这里我们要使用逼近的方法。什么意思呢?虽然浮点类型和双精度类型的数据不是精确的,但是它们和精确的数值相差不大,我们可以设定一个非常小的容许差值,只要两个浮点类型或者是双精度类型的差值小于我们设定的容许差值即可认为两个数是近似相等的,即 |x - y| < ε(x、y 为两个浮点类型或者双精度类型的数据,ε 为容许差值)。那么这个容许差值 ε 应该设置多大?
通常,在比较两个双精度(double)类型的数值时,ε 设置为 1E-14,而在比较两个单精度(float)类型的数值时,ε 设置为 1E-7。
final double EPSILON = 1E-14;
doulbe x = 1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1;
if(Math.abs(x - 0.5) < EPSILON)
{System.out.println("x约等于0.5");
}
这篇关于两个浮点数值的比较的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!