当前位置: 技术问答>linux和unix
arm-linux-gcc 编译的c代码中atof函数的怪现象
来源: 互联网 发布时间:2016-06-03
本文导语: char str[] = "2.34"; float ft; ft = atof(str); printf("f:%fn", ft); ft = 2.44; printf("f:%fn", ft); 输出: 200000 244000 atof执行后,小数部分丢失了,请高手指点迷津。 还有printf输出的为什么没有小数点? ...
char str[] = "2.34";
float ft;
ft = atof(str);
printf("f:%fn", ft);
ft = 2.44;
printf("f:%fn", ft);
输出:
200000
244000
atof执行后,小数部分丢失了,请高手指点迷津。
还有printf输出的为什么没有小数点?
|
楼主有没有include
我在redhat用gcc编译运行,开始也不对,加上include就正常了
还没想明白为什么
我在redhat用gcc编译运行,开始也不对,加上include就正常了
还没想明白为什么
|
猜一下原因,不知道对不对:
如果没有#include ,
C编译器见到一个没有声明的函数,默认地把它当成返回int,然后按整型来处理它的返回值
printf输出的为什么没有小数点,这个就不懂了。
如果同样的代码,在PC上运行正确而在arm上不正确,难道是库函数的实现有问题?
如果没有#include ,
C编译器见到一个没有声明的函数,默认地把它当成返回int,然后按整型来处理它的返回值
printf输出的为什么没有小数点,这个就不懂了。
如果同样的代码,在PC上运行正确而在arm上不正确,难道是库函数的实现有问题?
|
对浮点数处理不一样吧。
printf()是不是默认的强制类型转换了?
printf()是不是默认的强制类型转换了?
|
关注,我在我的机器上运行也是 有头文件正确
没有头文件,gcc可以编译通过,但是函数atof得出的值不正确
望高手解答,问什么不加头文件也能编译通过?
没有头文件,gcc可以编译通过,但是函数atof得出的值不正确
望高手解答,问什么不加头文件也能编译通过?
|
很多编译器都是这样处理的,没有函数声明默认返回值类型为int。
不同的编译器处理方式不一样,有的严格,有的比较松。
不同的编译器处理方式不一样,有的严格,有的比较松。
|
补充::::推测应该是因为标准库有相同的函数名不同的代码所致
|
|
这可就想不通了……
虽然这不象好主意,还是想建议楼主自己加个声明float(或double) atof(char*);
看看有没有效果。如果可以,加这个声明的时候最好把stdlib.h再去掉
或者可以这样,编译的时候加上-Wall选项,看看有没有针对atof声明的警告
可能我的思路已经被限制住了,钻到函数声明的牛角尖里出不来了……
printf丢小数点的问题,彻底不懂
最后的一招就是不用%f,自己写个函数,比如
print_float(float f)
{
printf("%d.", (int)f);
printf("%d", (int)((f-(int)f)*100000));
}
楼主还可以考虑去C/C++版再问问
|
正解。
|
include
我也遇到过这个问题
我也遇到过这个问题