问题可能很简单。检查了两种基本类型的相等性,得到了一些错误。两人之一,第二人长。
public class TesterPrimitive {
public static void main(String[] args) {
System.out.println("Equality - " + (5.0 == 5)); // Return true
System.out.println("Equality - " + (5.000000000000001D == 5L)); // Return false
System.out.println("Equality - " + (5.0000000000000001D == 5L)); // Return true
}}为什么第三次平等,双倍和长,我得到了真理?这是否意味着,在(.)之后的长0数字,将任何值更改为绝对值0?或者它改变了位,然后我们可以得到5.0的双倍?
发布于 2022-01-21 18:36:32
正如您在这里看到的,https://www.geeksforgeeks.org/difference-float-double-c-cpp/ double精确地具有15位数字的精度。16位数四舍五入。
另一件需要理解的事情也许很重要--在对不同原语执行操作时(如这里(5.0 == 5) ),int会被提升为double (为了相等的操作)。这里有更多的https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html
发布于 2022-08-05 14:56:35
双变量的精度约为15位,这足以使大多数purposes.double数据类型在计算机内存中占据8字节的空间,并在小数点后存储15到16个数字,您可以检查这篇文章,希望这将对您有所帮助。
https://stackoverflow.com/questions/70806042
复制相似问题