| 129 | * n {number|string} A numeric value. |
| 130 | */ |
| 131 | function parse(x, n) { |
| 132 | var e, i, nl; |
| 133 | |
| 134 | // Minus zero? |
| 135 | if (n === 0 && 1 / n < 0) n = '-0'; |
| 136 | else if (!NUMERIC.test(n += '')) throw Error(INVALID + 'number'); |
| 137 | |
| 138 | // Determine sign. |
| 139 | x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1; |
| 140 | |
| 141 | // Decimal point? |
| 142 | if ((e = n.indexOf('.')) > -1) n = n.replace('.', ''); |
| 143 | |
| 144 | // Exponential form? |
| 145 | if ((i = n.search(/e/i)) > 0) { |
| 146 | |
| 147 | // Determine exponent. |
| 148 | if (e < 0) e = i; |
| 149 | e += +n.slice(i + 1); |
| 150 | n = n.substring(0, i); |
| 151 | } else if (e < 0) { |
| 152 | |
| 153 | // Integer. |
| 154 | e = n.length; |
| 155 | } |
| 156 | |
| 157 | nl = n.length; |
| 158 | |
| 159 | // Determine leading zeros. |
| 160 | for (i = 0; i < nl && n.charAt(i) == '0';) ++i; |
| 161 | |
| 162 | if (i == nl) { |
| 163 | |
| 164 | // Zero. |
| 165 | x.c = [x.e = 0]; |
| 166 | } else { |
| 167 | |
| 168 | // Determine trailing zeros. |
| 169 | for (; nl > 0 && n.charAt(--nl) == '0';); |
| 170 | x.e = e - i - 1; |
| 171 | x.c = []; |
| 172 | |
| 173 | // Convert string to array of digits without leading/trailing zeros. |
| 174 | for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++); |
| 175 | } |
| 176 | |
| 177 | return x; |
| 178 | } |
| 179 | |
| 180 | |
| 181 | /* |