算术表达式计算6.135157E-6而不是零

tio*_*chi 2 java math android zero

我在我的应用程序的某个地方有以下代码

float private myMethod(float c){
    result = (float) (c+273.15);
}
Run Code Online (Sandbox Code Playgroud)

当"c"得到的值类似于-273.1455时,结果非常接近零,如0.0044.

但是当它得到值-273.15时,我得到的不是零:6.1035157E-6

为什么会这样?

Rog*_*sjö 6

问题是273.15是双重的,而不是浮点数,它们都不能完全代表273.15.但是,由于它们具有不同的精度,因此它们将实际存储不同的数字.当完成加法时,c被转换为double,这将能够存储273.15的浮点表示.所以现在你有两个具有几乎相同值的双打,差异将不为零.

要获得"更可预测"的结果,请使用273.15f确保您在计算中有浮动.这应该可以解决这个问题,但你需要做的是阅读二进制浮点算术,以及它与我们在学校教授的十进制算术有何不同.

浮点上的Wiki是一个很好的起点.