StringBuffer& StringBuffer::insert(size_t __pos,const short& __n) { //m_cache_str.insert(__pos,Number::toString((int)__n)); m_cache_str.insert(__pos,number_to_str(__n)) ; return *this; }
static inline jsstr_t *number_to_fixed(double val, int prec) { WCHAR buf[NUMBER_DTOA_SIZE]; int dec_point, size, buf_size, buf_pos; BOOL neg = FALSE; jsstr_t *ret; WCHAR *str; TRACE("%lf %d\n", val, prec); if(val < 0) { neg = TRUE; val = -val; } if(val >= 1) buf_size = log10(val)+prec+2; else buf_size = prec ? prec+1 : 2; if(buf_size > NUMBER_DTOA_SIZE) buf_size = NUMBER_DTOA_SIZE; number_to_str(val, buf, buf_size, &dec_point); dec_point++; size = 0; if(neg) size++; if(dec_point > 0) size += dec_point; else size++; if(prec) size += prec+1; str = jsstr_alloc_buf(size, &ret); if(!ret) return NULL; size = buf_pos = 0; if(neg) str[size++] = '-'; if(dec_point > 0) { for(; buf_pos<buf_size-1 && dec_point; dec_point--) str[size++] = buf[buf_pos++]; } else { str[size++] = '0'; } for(; dec_point>0; dec_point--) str[size++] = '0'; if(prec) { str[size++] = '.'; for(; dec_point<0 && prec; dec_point++, prec--) str[size++] = '0'; for(; buf_pos<buf_size-1 && prec; prec--) str[size++] = buf[buf_pos++]; for(; prec; prec--) { str[size++] = '0'; } } str[size++] = 0; return ret; }
static inline jsstr_t *number_to_exponential(double val, int prec) { WCHAR buf[NUMBER_DTOA_SIZE], *pbuf; int dec_point, size, buf_size, exp_size = 1; BOOL neg = FALSE; jsstr_t *ret; WCHAR *str; if(val < 0) { neg = TRUE; val = -val; } buf_size = prec+2; if(buf_size<2 || buf_size>NUMBER_DTOA_SIZE) buf_size = NUMBER_DTOA_SIZE; number_to_str(val, buf, buf_size, &dec_point); buf_size--; if(prec == -1) for(; buf_size>1 && buf[buf_size-1]=='0'; buf_size--) buf[buf_size-1] = 0; size = 10; while(dec_point>=size || dec_point<=-size) { size *= 10; exp_size++; } if(buf_size == 1) size = buf_size+2+exp_size; /* 2 = strlen(e+) */ else if(prec == -1) size = buf_size+3+exp_size; /* 3 = strlen(.e+) */ else size = prec+4+exp_size; /* 4 = strlen(0.e+) */ if(neg) size++; str = jsstr_alloc_buf(size, &ret); if(!ret) return NULL; size = 0; pbuf = buf; if(neg) str[size++] = '-'; str[size++] = *pbuf++; if(buf_size != 1) { str[size++] = '.'; while(*pbuf) str[size++] = *pbuf++; for(; prec>buf_size-1; prec--) str[size++] = '0'; } str[size++] = 'e'; if(dec_point >= 0) { str[size++] = '+'; } else { str[size++] = '-'; dec_point = -dec_point; } size += exp_size; do { str[--size] = '0'+dec_point%10; dec_point /= 10; } while(dec_point>0); size += exp_size; str[size] = 0; return ret; }
StringBuffer& StringBuffer::insert(size_t __pos,const unsigned long long & __n) { //m_cache_str.insert(__pos,Number::toString(__n)); m_cache_str.insert(__pos,number_to_str(__n)) ; return *this; }