Ejemplo n.º 1
0
 typename std::enable_if<std::is_same<CharT,char>::value,double>::type
 operator()(const CharT* s, size_t length) const
 {
     char *end = nullptr;
     double val = strtold_l(s, &end, locale_);
     if (s == end)
     {
         JSONCONS_THROW(json_runtime_error<std::invalid_argument>("Convert string to double failed"));
     }
     return val;
 }
Ejemplo n.º 2
0
int soap_s2decimal(struct soap *soap, const char *s, long double *p)
{ if (s)
  { if (!*s)
      return soap->error = SOAP_TYPE;
    if (!soap_tag_cmp(s, "INF"))
      *p = (long double)DBL_PINFTY;
    else if (!soap_tag_cmp(s, "+INF"))
      *p = (long double)DBL_PINFTY;
    else if (!soap_tag_cmp(s, "-INF"))
      *p = (long double)DBL_NINFTY;
    else if (!soap_tag_cmp(s, "NaN"))
      *p = (long double)DBL_NAN;
    else
    {
#if defined(WITH_C_LOCALE) && defined(HAVE_STRTOLD_L)
      char *r;
# ifdef WIN32
      *p = _strtold_l(s, &r, SOAP_LOCALE(soap));
# else
      *p = strtold_l(s, &r, SOAP_LOCALE(soap));
# endif
      if (*r)
#elif defined(HAVE_STRTOLD)
      char *r;
      *p = strtold(s, &r);
      if (*r)
#endif
#if defined(WITH_C_LOCALE) && defined(HAVE_SSCANF_L)
        if (sscanf_l(s, SOAP_LOCALE(soap), "%Lg", p) != 1)
          soap->error = SOAP_TYPE;
#elif defined(HAVE_SSCANF)
        if (sscanf(s, "%Lg", p) != 1)
          soap->error = SOAP_TYPE;
#else
        soap->error = SOAP_TYPE;
#endif
    }
  }
  return soap->error;
}