函数atof()将其结果舍入为整数部分

时间:2012-04-03 11:21:25

标签: c++ atof

为什么atof round“14718.5084”到14718.5? 有没有办法防止这种情况(即得到整数14718.5084)?

代码:

double latitude=atof("14718.5084");
std::cout <<"latitude test "<<latitude<< "\n";

,输出为:

latitude test 14718.5

感谢

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也不接受逗号分隔值(例如,在调试期间尝试更改变量值时)。