使用atof表示整数

时间:2014-03-10 11:42:43

标签: c++ atof

我继承了一些代码(来自已经离开的人)并找到了这个小片段:

double minX = xVal.find('.') == string::npos ? (double)atoi(xVal.c_str()) : atof(xVal.c_str());
double minY = yVal.find('.') == string::npos ? (double)atoi(yVal.c_str()) : atof(yVal.c_str());

他选择使用atoi作为整数类型是否有某些原因?我看不出有问题:

double minX = atof(xVal.c_str());
double minY = atof(yVal.c_str());

感谢。

4 个答案:

答案 0 :(得分:3)

真的你不应该使用atoi或atof。它们都被弃用了,分别被strtol和strtof所取代。

答案 1 :(得分:1)

没理由。这些三元运算符是额外的。 但是更好地使用strtod而不是atof - atof不会检测溢出和下溢错误。

答案 2 :(得分:0)

他的代码是: double minX =(double)atoi(xVal.c_str());

然后他发现浮动存在并且不假思索地调整代码。

答案 3 :(得分:0)

可能他被这个名字误导了,他忘记了它返回一个双重而不是浮动。如果atof返回一个浮点数,那么整数值可能会有一些精度损失。例如,在我的电脑上:

char buffer[20];
itoa(INT_MAX-113, buffer, 10);
double minXF = (float)atof(buffer);
double minXI = (double)atoi(buffer);    
std::cout << (int)minXF << std::endl;
std::cout << (int)minXI << std::endl;   

返回:

2147483520
2147483534

然而,由于atof返回一个double,这是无关紧要的,并且没有真正的理由使用atoi。因此,根据其他答案使用安全等价物,如果您碰巧看到他出去吃饭,可能会询问原作者。