以下是我正在做的事情:
if (oss.str() != sValue)
我可以举例如:
2000000000.000
和2000000000.0
。
这是相同的值,但不是相同的字符串。我需要在字符串中比较它,因为我试图捕捉sValue
的最终溢出。
在这种情况下,我可以这样做:
oss << std::setprecison(1) << std::fixed << value;
但如果我有问题,问题就会一样:
2000000000.1
和2000000000.123
我该如何解决?
提前致谢。
答案 0 :(得分:1)
从小数位开始,进行两组比较,在每次迭代时解析和比较一位数,然后转到相反的位置。
答案 1 :(得分:0)
您可以使用
中的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完成这项工作。
答案 2 :(得分:0)
工作答案:
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)