为什么atof round“14718.5084”到14718.5? 有没有办法防止这种情况(即得到整数14718.5084)?
代码:
double latitude=atof("14718.5084");
std::cout <<"latitude test "<<latitude<< "\n";
,输出为:
latitude test 14718.5
感谢
答案 0 :(得分:6)
尝试使用此代码,看看它是否符合您的要求:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
char input [256];
printf("Enter something: ");
gets(input);
printf("Result: %f\n", atof(input));
return 0;
}
打印时可能会丢失数字......
试试这个:
double latitude=atof("14718.5084");
std::cout.precision(9);
std::cout <<"latitude test "<< latitude << "\n";
答案 1 :(得分:2)
由于atof
返回double
,您将转换为float
。 (我猜这就是你正在做的事情。)
此外,14718.5084
无法准确表示。例如:
double f = 14718.5084;
给了我f == 14718.508400000001
。
答案 2 :(得分:1)
#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<< "\n";
答案 3 :(得分:0)
我的问题略有不同,但它符合标题。 atof看起来像四舍五入到整数部分,这不是输出精度问题。 我的解决方案是更改我的ubuntu安装的语言环境设置。 小数用逗号分隔而不是点。
尝试此代码(逗号代替点):
double latitude=atof("14718,5084");
std::cout <<"latitude test "<<latitude<< "\n";
如果它输出正确的浮点数(可能用点分隔),您应该将语言环境设置更改为英语或使用数据中的逗号浮动值(例如德语语言环境设置)
答案 4 :(得分:0)
区域设置可能会增加更多混乱,因为显然它们在整个工具链中并不总是一致。
E.g。我遇到了一个问题,即separted值被atof舍入为int(例如0.85 - > 0)因为语言环境需要逗号分隔值。但与此同时,调试器IDE也不接受逗号分隔值(例如,在调试期间尝试更改变量值时)。