Javascript: parsing a negative number (hex | binary)

It works with a lot of types, but not with hexadecimal or binary. Also, Number(octal)does not analyze the octal number.

Number("15")    ===   15;  // OK
Number("-15")   ===  -15;  // OK
Number("0x10")  ===   16;  // OK
Number("0b10")  ===    2;  // OK
Number("-0x10") ===  NaN;  // FAIL (expect  -16)
Number("-0b10") ===  NaN;  // FAIL (expect   -2)
Number("0777")  ===  777;  // FAIL (expect  511)
Number("-0777") === -777;  // FAIL (expect -511)

Question : How to properly analyze all valid Javascript numbers?

Change A

parseInt()don’t help me because I need to check every opportunity (if I start with 0x, I use 16, for example).

Change B

Chrome 0777, 511, . , javascript-. , javascript. , , , 0 - Number(hex) , Number(-hex). .

+4
4

:

parseInt (, ):

parseInt("-0777", 8) 
parseInt("-0x10", 16) 
+4

.

function parseNumber (num) {
   var neg = num.search('-') > -1;
   var num = Number(num.replace('-', ''));
   return num * (neg ? -1 : 1);
}
+2

, Javascript, , Number. , : Number!

, parseInt, .

0

, , parseInt. , b (Chrome), , OP, Number("0b10") NaN. b, .

var numbers = [
  "15", "-15", "0x10", "0b10", "-0x10", "-0b10", "0777", "-0777"
];

function parser(val) {
  if (val.indexOf("x") > 0) {
    // if we see an x we assume it hex
    return parseInt(val, 16);
  } else if (val.indexOf("b") > 0) {
    // if we see a b we assume it binary
    return parseInt(val.replace("b",""),2);
  } else if (val[0] === "0") {
    // if it has a leading 0, assume it octal
    return parseInt(val, 8);
  }
  // anything else, we assume is decimal
  return parseInt(val, 10);
}

for (var i = 0; i < numbers.length; i++) {
  console.log(parser(numbers[i]));
}
Hide result

, , , (, x, x), , .

0

All Articles