在C语言中,0.55==0.55f
为假,而0.5==0.5f
为真。为什么不同?
>
比较0.55
:
#include <stdio.h>
int main() {
if (0.55 == 0.55f)
printf("Hi");
else
printf("Hello");
}
输出Hello
。
比较0.5
:
#include <stdio.h>
int main() {
if (0.5 == 0.5f)
printf("Hi");
else
printf("Hello");
}
输出Hi
。
对于这两个代码片段,我期望Hello
。
为什么有这种差异?
您正在比较两种不同类型的值,即double和float。考虑一下不精确数字的大小限制。
A-
B-
A==B将始终返回true
A-
B-
A==B-
同样,0.55不能用二进制精确表示,但可以用0.5表示。
0.55d的二进制表示-
所以他们不会平等
0.5d的二进制表示-
所以他们是平等的
希望它能消除你的疑虑
0.5
是一个二进有理数,并且具有适当的幅度,因此0.5
正好是浮点数
或双
的二分之一。
对于0.55
,情况并非如此。double
将以不低于float
的精度存储该数字,很可能更高。
在这两种情况下,在=
之前,浮点数
都隐式地转换为双
,但此时已发生任何截断。
问题内容: 当我比较具有相同下划线字符串的两个StringBuilder对象时,即使value应该为true也会返回。 问题答案: 这是因为不会覆盖类中的方法。 您将必须将两个对象都转换为,然后进行比较 这将为您提供正确的结果。显然,您必须注意 null 检查等。 根据合同,如果覆盖equals,则也必须覆盖它们,但是由于可变,因此其值的任何更改都会影响对象的哈希码。如果用作键,可能会导致存储的值
我正在尝试使用Java8按姓名和年龄对员工列表进行排序,我在下面创建了,但它给我一个编译器错误
问题内容: 如果我输入的任何值都小于24,它会打印“ You will be old …”语句。如果我输入的任何值都大于24(最大为99),它将打印“ you old”语句。 问题是,如果您输入100或更大的值,它会显示“您将在知道之前变老”。声明。 问题答案: 您正在针对另一个字符串值(而不是整数值)测试一个字符串值。 应该 在Python中,您可以对字符串使用大于/小于符号,但是您怎么想都行不
我在试着比较时间和瞬间。这是我的剧本 这是我的表格 从< code > console . log(today . format(" hh:mm "))我得到这个结果< code>01:44。 在上面的脚本中,我总是转到<code>或<code>,因此有任何方法可以修复它吗? 这是我的小提琴 https://jsfiddle.net/s9wfh9ye/33/ 我的更新问题
问题内容: 同时执行: 我目前正在学习do-while vs while,并且想用while重写上面的java片段(已经声明和初始化)。以下重写的代码是否正确: 而: 干杯 问题答案: 之间的区别和是 当 比较完成。使用,您将在最后进行比较,因此至少要进行一次迭代。 您的示例的等效代码 等效于: 一般理解 甲环是一个 出口控制的循环 ,这意味着它离开末。甲环是一个 条目控制的循环 ,这意味着该条件
问题内容: A = 314 结果: 我知道在if语句中使用两个“ =”和“ is”是不正常的。但是我想知道Python解释器如何解释该语句。 表达式是同时解释还是短路解释? 问题答案: 您遇到的事情称为 运算符链接 。 从比较文档: 可以任意链接比较,例如 与等效,不同之处在于比较仅被评估一次(但是在两种情况下,如果发现错误,则根本不评估)。 强调我的。 因此,这意味着将被解释为,仅此而已。 更一