这是我正在做的事情:
if (oss.str() != sValue)
我可以有例如:
2000000000.000和2000000000.0。
这是相同的值,但不是相同的字符串。我需要在字符串中比较它,因为我试图捕捉sValue.
在这种情况下,我可以这样做:
oss << std::setprecison(1) << std::fixed << value;
但是如果我有,问题将是相同的:
2000000000.1和2000000000.123
我该如何解决?
提前致谢。
这是我正在做的事情:
if (oss.str() != sValue)
我可以有例如:
2000000000.000和2000000000.0。
这是相同的值,但不是相同的字符串。我需要在字符串中比较它,因为我试图捕捉sValue.
在这种情况下,我可以这样做:
oss << std::setprecison(1) << std::fixed << value;
但是如果我有,问题将是相同的:
2000000000.1和2000000000.123
我该如何解决?
提前致谢。
从小数位开始,做两组比较,每次迭代解析比较一个数字,走到相反的两端。
您可以使用 strncmp() 函数
int strncmp(const char *s1, const char *s2, size_t n);
使用 std::string 上的 c_str() 方法和 n = min( s1.length(), s2.length() );
使用 boost 更容易使用整数比较
boost::lexical_cast<int>(s1) == boost::lexical_cast<int>(s2)
对于 std::string s1,s2 完成了这项工作。
一个有效的答案:
size_t i;
i = sValue.find('.'); // find the point
if (i < sValue.size()) // if there is one, then ...
{
i = sValue.size() - i - 1; // find the number of decimal
oss << std::setprecision(i) << std::fixed << value; // apply the precision
}
else // otherwise, it's neither a float neither a double
oss << std::setprecision(0) << std::fixed << value; // no need of precision
if (oss.str() != sValue)