objectcomputing / mFAST

A FAST (FIX Adapted for STreaming) encoder/decoder
http://objectcomputing.github.io/mFAST
BSD 3-Clause "New" or "Revised" License
224 stars 112 forks source link

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

Open blogdarkspot opened 3 years ago

blogdarkspot commented 3 years ago

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.