2

这是我正在做的事情:

if (oss.str() != sValue)

我可以有例如:

2000000000.0002000000000.0

这是相同的值,但不是相同的字符串。我需要在字符串中比较它,因为我试图捕捉sValue.

在这种情况下,我可以这样做:

oss << std::setprecison(1) << std::fixed << value;

但是如果我有,问题将是相同的:

2000000000.12000000000.123

我该如何解决?

提前致谢。

4

3 回答 3

1

从小数位开始,做两组比较,每次迭代解析比较一个数字,走到相反的两端。

于 2013-02-23T20:12:58.727 回答
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 完成了这项工作。

于 2013-02-23T19:54:32.360 回答
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)
于 2013-02-24T01:08:03.297 回答