mFAST icon indicating copy to clipboard operation
mFAST copied to clipboard

Problem when use fast::json::decode with negavite decimal number less than zero

Open blogdarkspot opened this issue 3 years ago • 0 comments

The code below return a positive number when the value is less then zero, for example -0.2.

std::istream &operator>>(std::istream &strm, decimal_value_storage &storage) {

  int64_t mantissa;
  int16_t exponent = 0;
  if (!(strm >> std::skipws >> mantissa)) {
    return strm;
  }
  // BOOST_THROW_EXCEPTION(json_decode_error(strm, "Expect decimal"));

  std::streambuf *sbuf = strm.rdbuf();

  int c = sbuf->sbumpc();
  if (c == '.') {
    bool negative = false;

    if (mantissa < 0) { //here mantissa value is 0, there isn't negative zero
      negative = true;
      mantissa = -mantissa;
    }
 (...)
  }

This problem occurs because there is not negative zero, so the value -0.2 become 0.2.

blogdarkspot avatar Apr 19 '21 12:04 blogdarkspot