今天我在android代码中遇到了非常异常的错误

问题描述

我试图从 8.6f 值中减去 1.0f,它返回给我 7.6000004

float temp=8.6f-1.0f;
Log.e("temp",temp+"");

它正在打印 7.6000004 这里出了什么问题?我是安卓还是安卓?

解决方法

像这样的浮点运算并不精确;这是计算机科学中一个众所周知的问题。另见:https://floating-point-gui.de/basic/

这与有人要求您准确回答“1 除以 3 等于 10 位小数?”的问题基本相同。 - 你能给出的最佳答案是 0.3333333334。

但是 3 * 0.3333333334 = 1.0000000002

这是一个存在于每个数字系统中的限制,只是在不同的情况下。

如果你需要确切的数字,你应该使用 BigDecimal:

import java.math.BigDecimal;

class FloatingPointExample {
    public static void main(String[] args) {
        // Prints 7.6000004
        System.out.println(8.6f - 1.0f);

        // Prints 7.6
        System.out.println(new BigDecimal("8.6").subtract(new BigDecimal("1.0")));

        // Do NOT pass floats to BigDecimal
        // Prints 7.6000003814697265625
        System.out.println(new BigDecimal(8.6f).subtract(new BigDecimal(1.0f)));

        // Do NOT pass doubles to BigDecimal
        // Prints 7.5999999999999996447286321199499070644378662109375
        System.out.println(new BigDecimal(8.6).subtract(new BigDecimal(1.0)));
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...