0

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

代码:

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

输出是:

latitude test 14718.5

谢谢

4

5 回答 5

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";
于 2012-04-03T11:27:09.470 回答
2

因为atof返回 a double,您将其转换为 a float。(我猜这就是你在做什么)。

另外,14718.5084不能准确表示。例如:

double f = 14718.5084;

给我f == 14718.508400000001

于 2012-04-03T11:25:49.817 回答
1

区域设置可能会增加更多的混乱,因为显然它们并不总是在整个工具链中始终有效。

例如,我遇到了点分隔值被 atof 舍入为 int 的问题(例如 0.85 -> 0 ),因为语言环境需要逗号分隔值。但同时,调试器 IDE 也不接受逗号分隔的值(例如,在调试期间尝试更改变量值时..)。

于 2014-01-24T01:30:17.907 回答
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";  
于 2012-04-03T11:43:28.530 回答
0

我有一个稍微不同的问题,但它符合标题。atof 看起来像是四舍五入到整数部分,这不是输出精度问题。我的解决方案是更改我的 ubuntu 安装的语言环境设置。小数用逗号而不是点分隔。

试试这个代码(逗号而不是点):

double latitude=atof("14718,5084");
std::cout <<"latitude test "<<latitude<< "\n";

如果它输出正确的浮点数(可能以点分隔),您应该将您的语言环境设置更改为英语或使用数据中的逗号浮点值(例如德语语言环境设置)

于 2013-05-17T08:58:33.037 回答