我的应用程序中有以下代码
float private myMethod(float c){
result = (float) (c+273.15);
}
当“c”得到类似-273.1455的值时,结果非常接近零,如0.0044。
但是当它得到-273.15的值时我会得到这个而不是零:6.1035157E-6
为什么会这样?
答案 0 :(得分:6)
问题是273.15是双重的,而不是浮点数,它们都不能完全代表273.15。但是,由于它们具有不同的精度,因此它们将实际存储不同的数字。当完成加法时,c被转换为double,这将能够存储273.15的浮点表示。所以现在你有两个具有几乎相同值的双打,差异将不为零。
要获得“更可预测”的结果,请使用273.15f以确保您在计算中有浮动。这应该可以解决这个问题,但你需要做的是阅读二进制浮点算术,以及它与我们在学校教授的十进制算术的区别。
Wiki on floating point是一个很好的起点。
答案 1 :(得分:2)
计算机中的浮点计算不准确。您应该阅读有关浮点算术的内容以防止此类错误。
答案 2 :(得分:0)
问题不在于值,而在于显示给用户。
我假设您正在将其转换为String。完成此操作的方法详见http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Double.html#toString(double)
要显示正确的值,请使用NumberFormat类http://docs.oracle.com/javase/1.4.2/docs/api/java/text/NumberFormat.html
示例:
NumberFormat formater = NumberFormat.getNumberInstance()
formatter.setMaximumFractionDigits(4);
formater.format(myMethod(-273.15))
现在你应该得到0。