有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (5) 个答案

  1. # 1 楼答案

    你会找到你的答案

    TL;DR summary:你必须学习浮点在计算中是如何表示的,这样你才能知道为什么会发生这些事情。这是浮点表示的产物,如果这种结果不可接受,可以通过不使用浮点类型来修改它

  2. # 2 楼答案

    浮点不能精确地表示值0.1或0.1的任意倍数。它以2为基数,显示它的数字系统以10为基数。以base 2格式存储base 10数据时会丢失一些数据

  3. # 3 楼答案

    你玩得很开心。但是是二进制的。十进制中有周期数。比如1/3,也就是1.33333,以此类推。十进制中的一些数字不是周期性的,但在二进制中是周期性的

    因此,当存在周期数的可能性时,计算总是不准确的

  4. # 4 楼答案

    我建议读What Every Scientist Should Know About Floating-Point Arithmetic。这是浮点数学的标准行为。大多数系统(包括Java)使用IEEE 754作为浮点数的标准表示形式。这个标准并不总是完美地表示精确的数值,所以您在打印时经常会看到轻微的数值不一致,正如您在这里发现的

  5. # 5 楼答案

    这是一个典型的浮点结果

    FloatDouble得到的结果不同:

    System.out.println(4.0f-3.1f);
    System.out.println(4.0d-3.1d);
    

    输出:

    0.9000001
    0.8999999999999999
    

    这是因为0.1不能在基2中均匀地表示,并导致精度损失。例如:

    System.out.println(2.0f-1.9f);
    System.out.println(2.0d-1.9d);
    

    应该都返回0.1,但实际上会输出:

    0.100000024
    0.10000000000000009