2009-12-29 2 views
1

Я использую eval для преобразования десятичных знаков в десятичные числа.eval создает проблемы при оценке

eval("000451.01"); 

Когда я использую вышеуказанный оператор javascript, он генерирует исключение «ожидается»;

и при использовании eval("000451"); это дает мне другой результат.

У кого-нибудь есть идея?

ответ

8

Вы должны не использовать eval для анализа номеров; он будет на порядки медленнее, чем обычные.

Вместо этого вы должны использовать функцию parseFloat. примерно: parseFloat("000451.01").

Причина, по которой вы получаете ошибку, заключается в том, что Javascript обрабатывает числа, которые начинаются с 0 как восьмеричные числа, которые не могут иметь десятичные числа.

Если вы хотите разобрать целое число, вызовите parseInt и не забудьте указать второй параметр 10, чтобы заставить его проанализировать базовые 10 чисел, или вы получите ту же проблему.

1

Номера, начинающиеся с нуля, интерпретируются как восьмеричные числа. Но восьмеричные числа - это целые числа, а не числа с плавающей запятой. Так что попробуйте это:

eval("451.01") 

Но было бы лучше, если вы используете parseFloat function:

parseFloat("000451.01") 
+0

'parseFloat' не принимает базовый параметр. – SLaks

+0

@SLaks: Ой, ты прав. – Gumbo

1

В Javascript, маркер, начиная с нуля целое число буквальным в базе 8. 000451 в базе 8 297 в базе 10 и 000451.01 анализируется как int(297) dot int(1) вместо одного литерала.

Удалите начальные нули, и он должен работать.

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