{
size_t len, i;
const char *ptr;
- bool zero;
len = strlen(val);
if (len == 0)
return;
- zero = true;
- for (i = 0; val[i]; ++i) {
- if (val[i] != '0' && val[i] != '.') {
- zero = false;
- break;
- }
- }
bc_num_expand(n, len);
ptr = strchr(val, '.');
if (ptr != NULL)
n->rdx = (size_t)((val + len) - (ptr + 1));
- if (!zero) {
- i = len - 1;
- for (;;) {
- n->num[n->len] = val[i] - '0';
- ++n->len;
+ for (i = 0; val[i]; ++i) {
+ if (val[i] != '0' && val[i] != '.') {
+ // Not entirely zero value - convert it, and exit
+ i = len - 1;
+ for (;;) {
+ n->num[n->len] = val[i] - '0';
+ ++n->len;
skip_dot:
- if ((ssize_t)--i == (ssize_t)-1) break;
- if (val[i] == '.') goto skip_dot;
+ if ((ssize_t)--i == (ssize_t)-1) break;
+ if (val[i] == '.') goto skip_dot;
+ }
+ break;
}
}
+ // if this is reached, the value is entirely zero
}
// Note: n is already "bc_num_zero()"ed,