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

Today I am facing very abnormal bug in android code

我正在尝试从 8.6f 值中减去 1.0f,它 returns 我 7.6000004

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

正在打印 7.6000004 这里出了什么问题?我是或 Android ?

像这样的浮点运算并不精确;这是计算机科学中的一个众所周知的问题。另见: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)));
    }
}