static void php_str2num(bc_num *num, const char *str) { const char *p; if (!(p = strchr(str, '.'))) { bc_str2num(num, (char*)str, 0); } else { bc_str2num(num, (char*)str, strlen(p + 1)); } }
/* {{{ php_str2num Convert to bc_num detecting scale */ static void php_str2num(bc_num *num, char *str) { char *p; if (!(p = strchr(str, '.'))) { bc_str2num(num, str, 0); return; } bc_str2num(num, str, strlen(p+1)); }
int64 f_bccomp(CStrRef left, CStrRef right, int64 scale /* = -1 */) { if (scale < 0) scale = BCG(bc_precision); bc_num first, second; bc_init_num(&first); bc_init_num(&second); bc_str2num(&first, (char*)left.data(), scale); bc_str2num(&second, (char*)right.data(), scale); int64 ret = bc_compare(first, second); bc_free_num(&first); bc_free_num(&second); return ret; }
static int64_t HHVM_FUNCTION(bccomp, const String& left, const String& right, int64_t scale /* = -1 */) { if (scale < 0) scale = BCG(bc_precision); bc_num first, second; bc_init_num(&first); bc_init_num(&second); bc_str2num(&first, (char*)left.data(), scale); bc_str2num(&second, (char*)right.data(), scale); int64_t ret = bc_compare(first, second); bc_free_num(&first); bc_free_num(&second); return ret; }
// constructor BigNumber::BigNumber (const char *const s) : num_ (NULL) { bc_str2num(&num_, s, scale_); } // end of constructor from string