关于c ++:函数atof()将其结果四舍五入为整数部分

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 <<"
"
;


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

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

1
double f = 14718.5084;

给我f == 14718.508400000001


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<<"
"
;

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