2016-04-06 2 views
0

У меня есть функция, которая преобразует строковое представление числа любой допустимой базы чисел и ее оснований. Как правильно обрабатывать недопустимые числа (например, используя символы A-K в базах < 11)? В недействительных случаях я хотел бы вернуть -1.Преобразование базы чисел с обработкой исключений

До сих пор я мог добиться определенного успеха с помощью проверки isNan(), но он разбивается на десятичную базу (конвертировать («5A6E», 10)).

Мой код до сих пор:

function convert(strNumber, radix) { 
    a = parseInt(strNumber, radix) 

    if(isNaN(a)){ 
    return -1 
    } 
    else { 
    return a 
    } 
} 
+0

'try' -' catch' – Amit

+0

Неудача как? 'convert (" 5A6E ", 10)' возвращает '5'. –

+0

Thats the problem Я думаю, если я правильно понимаю базы чисел, «5A6E» не должно быть допустимым числом в десятичной базе, так как оно состоит из 0-9. У меня это неправильно? – Red

ответ

0

В вашем примере поломки "5A6E" вы получите обратно 5, потому что это, как работает ParseInt - смотрите примеры в документации:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt

В в нижней части приведенной выше страницы вы найдете раздел под названием «Более строгая функция синтаксического анализа», как представляется, он выполняет то, что вы ищете, используя RegEx.

Обновление: если подумать об этом, функция «Разбор строки» будет работать только для базы 10. Чтобы быть более гибкой, вы должны добавить функцию, которая смотрит на radix, и на основании этого проверяет недействительные символов в strNumber, возвращая -1, если они найдены, и вызывает parseInt, если нет.

Например, если radix = 2, все символы, кроме 0 и 1, являются недопустимыми. Если это 11, все символы, кроме 0-9 и «a», являются недействительными.

Сложный, но он будет делать то, что вы хотите.

+0

Я думал об этом в начале, но я хотел спросить, есть ли более элегантное решение. Спасибо за информацию, хотя. – Red

Смежные вопросы