【发布时间】:2016-08-30 12:01:39
【问题描述】:
在 C++ 和 C 中有多种方法可以将字符串转换为整数,但我还没有找到解析浮点数失败的转换方法。
const float fnum = std::stof("1.5");
std::cout << fnum << std::endl; // prints "1.5", all okay
const int inum = std::stoi("1.5");
std::cout << inum << std::endl; // prints "1", but wrong!
我需要这个来分析列类型的 CSV 文件。如果一列中的所有字段都是整数,则将该列存储为 std::vector
唯一看起来很有希望的方法是:
std::string num = "1.5";
char *end = nullptr;
const long lnum = strtol(num.data(), &end, 10);
if (end != &*num.end()) {
std::cout << "Float? " << l << " / " << num << std::endl;
} else {
std::cout << "Integer! " << l << " / " << num << std::endl;
}
这可行,但很丑陋。有没有 C++ 方式来解决这个问题?
【问题讨论】:
-
@dommynik - 你确定
const int fnum吗?不是const float fnum吗? -
除了 Joachim 所说的之外,您还可以使用
stringstream并在转换调用后检查流是否为空。 -
没有真正好的方法。无论哪种方式 a) 使用字符串解析。或者 b) 你通过 boost 使用 lexical_cast (这应该抛出有点难看的异常)或者 c) 你之后将它转换回字符串并查看字符串是否相同。啊,是的,还有字符串流。
-
@max66 感谢和抱歉,已更改!