我正在使用visual C++ 6.0,在程序中我比较float和double变量例如这个程序
#include<stdio.h>
int main()
{
float a = 0.7f;
double b = 0.7;
printf("%d %d %d",a<b,a>b,a==b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到1 0 0作为输出
并为
#include<stdio.h>
int main()
{
float a = 1.7f;
double b = 1.7;
printf("%d %d %d",a<b,a>b,a==b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我输出0 0 0.
请告诉我为什么我得到这些奇怪的输出,有没有办法在同一个处理器上预测这些输出.如何比较C中的两个变量?
int main()
{
float lfResult = 19.893196;
if(lfResult == 19.893196)
printf("Works");
else
printf("does not work");
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:不起作用
为什么if病情会失败?
可能重复:
与float文字的float比较中的奇怪输出
float a = 0.7;
if (a < 0.7) ;
Run Code Online (Sandbox Code Playgroud)
为什么这里的表达式评估为真?
情况1
float a = 0.6;
if (a < 0.6)
{
printf("c");
}
else
{
printf("c#");
}
Run Code Online (Sandbox Code Playgroud)
输出c#
案例2
float a = 0.9;
if (a < 0.9)
{
printf("c");
}
else
{
printf("c#");
}
Run Code Online (Sandbox Code Playgroud)
输出c
现在问题是为什么?
我在C中编写了一个程序,当我比较浮点数和使用函数atof转换为float的字符串的相同值时,得到NOT EQUAL.
#include<stdio.h>
main(){
char str[10] = "54.23" ;
float val = 54.23 ;
if( atof(str) == val )
printf("\nconverted correctly");
else
printf("\nThen What is the use of atof\n ");
}
Run Code Online (Sandbox Code Playgroud)
本程序显示输出:"那么atof有什么用"请告诉我为什么这个匿名行为会被这个程序显示出来?
float f=2.2;
if (f==2.2)
printf("abc");
else
printf("xyz");
Run Code Online (Sandbox Code Playgroud)
此代码打印xyz,而如果我们给2.5而不是2.2,则输出为abc.
请解释为什么以下代码片段的行为不同.
#include<stdio.h>
int main(){
float a=0.1;
if(a<0.1)
printf("less");
else
printf("greater than equal");
getchar();
}
Run Code Online (Sandbox Code Playgroud)
Output:greater than equal
#include<stdio.h>
int main(){
float a=0.7;
if(a<0.7)
printf("less");
else
printf("greater than equal");
getchar();
}
Run Code Online (Sandbox Code Playgroud)
Output:less 与我的预期相反.
PS:这不是功课.
根据这篇文章,当比较float和double时,float应被视为double.以下程序似乎没有遵循此声明.这种行为看起来非常不可预测.这是我的计划:
void main(void)
{
double a = 1.1; // 1.5
float b = 1.1; // 1.5
printf("%X %X\n", a, b);
if ( a == b)
cout << "success " <<endl;
else
cout << "fail" <<endl;
}
Run Code Online (Sandbox Code Playgroud)
我还打印了值的十六进制表示法.它们在两种情况下都不同.我的编译器是Visual Studio 2005
你能解释一下这个输出吗?谢谢.
我已经问过这个问题了,但这个特定子部分的答案对我来说并不清楚.请参阅以下代码:
float f=2.5;
if (f==2.5)
printf("abc");
else
printf("xyz"); //prints abc
Run Code Online (Sandbox Code Playgroud)
我知道如果我们2.2取而代之2.5,它将输出相反的值,因为float被视为double和浮点nos.他们真的不应该等同吗?我想知道为什么有一个例外,数字有他们的最后一个十进制数字5.
我正在用两种不同的语言来回答同样的问题。得到了不同的结果。需要帮助以了解为什么会这样吗?
我用python编写了相同的代码,得到的结果与C预期的结果不同。
代码1:
{
float f = 0.1;
if (f == 0.1)
printf("YES\n");
else
printf("NO\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码2:
f = float()
f = 0.1
if (f == 0.1):
print("YES")
else:
print("NO")
Run Code Online (Sandbox Code Playgroud)
两者必须提供与否相同的输出。但是只有C给出了预期的输出,而Python给出的是YES。