Function atof() rounds its result to integer part
为什么atof将" 14718.5084"舍入为14718.5?
有没有办法防止这种情况发生(即获取整数14718.5084)?
码:
1 2 3 | double latitude=atof("14718.5084"); std::cout <<"latitude test"<<latitude<<" "; |
输出为:
1 | latitude test 14718.5 |
谢谢
尝试下面的代码,看它是否完全符合您的要求:
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> #include <stdlib.h> int main () { char input [256]; printf("Enter something:"); gets(input); printf("Result: %f ", atof(input)); return 0; } |
也许您在打印时丢失了数字...
尝试这个:
1 2 3 4 | double latitude=atof("14718.5084"); std::cout.precision(9); std::cout <<"latitude test"<< latitude <<" "; |
因为
另外,
1 | double f = 14718.5084; |
给我
1 2 3 4 5 6 7 8 9 | #include <limits> double latitude=atof("14718.5084"); typedef std::numeric_limits< double > dbl; std::cout <<"latitude test"; std::cout.precision(dbl::digits10); std::cout<<latitude<<" "; |
语言环境设置可能会增加更多的混乱,因为显然它们在整个工具链中并不总是一致地起作用。
例如。我遇到了一个问题,即点分隔值被atof舍入为int(例如0.85-> 0),因为语言环境要求使用逗号分隔的值。但是同时,调试器IDE也不会接受以逗号分隔的值(例如,在调试过程中尝试更改变量值时。)。
我有一个略有不同的问题,但它符合标题。
atof看起来像四舍五入到整数部分,这不是输出精度问题。
我的解决方案是更改ubuntu安装的语言环境设置。
小数用逗号而不是点分隔。
尝试以下代码(用逗号代替点):
1 2 3 | double latitude=atof("14718,5084"); std::cout <<"latitude test"<<latitude<<" "; |
如果它输出正确的浮点数(可以用点分隔),则应将语言环境设置更改为英语,或使用数据中的逗号浮点值(例如,德国语言环境设置)