source: frontend/node_modules/core-js-pure/modules/esnext.number.from-string.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 12 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 2.6 KB
Line 
1'use strict';
2var $ = require('../internals/export');
3var uncurryThis = require('../internals/function-uncurry-this');
4var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');
5
6var INVALID_NUMBER_REPRESENTATION = 'Invalid number representation';
7var INVALID_RADIX = 'Invalid radix';
8var $RangeError = RangeError;
9var $SyntaxError = SyntaxError;
10var $TypeError = TypeError;
11var $parseInt = parseInt;
12var pow = Math.pow;
13var valid = /^[0-9a-z]+(\.[0-9a-z]+)?$/;
14var charAt = uncurryThis(''.charAt);
15var charCodeAt = uncurryThis(''.charCodeAt);
16var exec = uncurryThis(valid.exec);
17var numberToString = uncurryThis(1.1.toString);
18var stringSlice = uncurryThis(''.slice);
19var split = uncurryThis(''.split);
20
21var validDigitForRadix = function (string, R) {
22 for (var i = 0; i < string.length; i++) {
23 var code = charCodeAt(string, i);
24 // '.' is allowed
25 if (code === 0x2E) continue;
26 // '0'-'9' - digit value 0-9
27 if (code >= 0x30 && code <= 0x39) {
28 if (code - 0x30 >= R) return false;
29 // 'a'-'z' - digit value 10-35
30 } else if (code >= 0x61 && code <= 0x7A) {
31 if (code - 0x61 + 10 >= R) return false;
32 } else return false;
33 }
34 return true;
35};
36
37// `Number.fromString` method
38// https://github.com/tc39/proposal-number-fromstring
39$({ target: 'Number', stat: true, forced: true }, {
40 fromString: function fromString(string, radix) {
41 var sign = 1;
42 if (typeof string != 'string') throw new $TypeError(INVALID_NUMBER_REPRESENTATION);
43 if (!string.length) throw new $SyntaxError(INVALID_NUMBER_REPRESENTATION);
44 if (charAt(string, 0) === '-') {
45 sign = -1;
46 string = stringSlice(string, 1);
47 if (!string.length) throw new $SyntaxError(INVALID_NUMBER_REPRESENTATION);
48 }
49 var R = radix === undefined ? 10 : toIntegerOrInfinity(radix);
50 if (R < 2 || R > 36) throw new $RangeError(INVALID_RADIX);
51 if (!exec(valid, string) || !validDigitForRadix(string, R)) throw new $SyntaxError(INVALID_NUMBER_REPRESENTATION);
52 var parts = split(string, '.');
53 var mathNum = $parseInt(parts[0], R);
54 if (parts.length > 1) mathNum += $parseInt(parts[1], R) / pow(R, parts[1].length);
55 if (R === 10) {
56 var compareString = string;
57 if (parts.length > 1) {
58 var fraction = parts[1];
59 while (fraction.length && charAt(fraction, fraction.length - 1) === '0') {
60 fraction = stringSlice(fraction, 0, -1);
61 }
62 compareString = fraction.length ? parts[0] + '.' + fraction : parts[0];
63 }
64 if (numberToString(mathNum, R) !== compareString) throw new $SyntaxError(INVALID_NUMBER_REPRESENTATION);
65 }
66 return sign * mathNum;
67 }
68});
Note: See TracBrowser for help on using the repository browser.