为什么 atof 将“14718.5084”舍入到 14718.5?有没有办法防止这种情况(即获得整数 14718.5084)?
代码:
double latitude=atof("14718.5084");
std::cout <<"latitude test "<<latitude<< "\n";
输出是:
latitude test 14718.5
谢谢
试试这段代码,看看它是否完全符合您的要求:
#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";
因为atof
返回 a double
,您将其转换为 a float
。(我猜这就是你在做什么)。
另外,14718.5084
不能准确表示。例如:
double f = 14718.5084;
给我f == 14718.508400000001
。
区域设置可能会增加更多的混乱,因为显然它们并不总是在整个工具链中始终有效。
例如,我遇到了点分隔值被 atof 舍入为 int 的问题(例如 0.85 -> 0 ),因为语言环境需要逗号分隔值。但同时,调试器 IDE 也不接受逗号分隔的值(例如,在调试期间尝试更改变量值时..)。
#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";
我有一个稍微不同的问题,但它符合标题。atof 看起来像是四舍五入到整数部分,这不是输出精度问题。我的解决方案是更改我的 ubuntu 安装的语言环境设置。小数用逗号而不是点分隔。
试试这个代码(逗号而不是点):
double latitude=atof("14718,5084");
std::cout <<"latitude test "<<latitude<< "\n";
如果它输出正确的浮点数(可能以点分隔),您应该将您的语言环境设置更改为英语或使用数据中的逗号浮点值(例如德语语言环境设置)