我在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有什么用"请告诉我为什么这个匿名行为会被这个程序显示出来?
==这是您的代码版本,它实际显示了有问题的值:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[10] = "54.23";
float val = 54.23;
printf("atof(str) = %.15f\n", atof(str));
printf(" val = %.15f\n", val);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当你运行它时,你会看到:
$ gcc -Wall atof.c
$ ./a.out
atof(str) = 54.229999999999997
val = 54.229999542236328
$
Run Code Online (Sandbox Code Playgroud)
这些值接近于单精度浮点数的预期精度,但它们并不相同.此外,正如其他人所指出的那样,atof返回a double,因此您将float升级后的值double与a double返回的完整精度进行比较atof.
与此类问题一样,在使用代码中的浮点运算进一步处理之前,请先阅读此内容."带回家信息"是你永远不应该比较浮点数或双数==- 总是将绝对差值与适当的容差值进行比较.