2012-08-03 2 views
2

Я написал функцию, которая ведет себя по-разному в зависимости от числового типа ее параметров. Целое или плавающее.Javascript бросает числа с плавающей точкой в ​​целые числа без причины

Используя код от этого вопроса How do I check that a number is float or integer? это было легко обнаружить, если поплавок или нет, но потом я наткнулся на случай, что Javascript слепки 1.0 в 1 без причины, если вы вызываете функцию, используя этот номер.

Пример:

function dump(a, b) { 
console.log(a, typeof b, b); 
} 

dump('1', 1); 
dump('1.0', 1.0); 
dump('1.1', 1.1); 

выход хром, светлячок, то есть, опера и сафари все дали тот же результат:

1 number 1 
1.0 number 1 "wrong" 
1.1 number 1.1 

Я знаю, что Javascript знает только тип number но вынужден литая кажется идти за борт. Единственное решение, с которым я столкнулся, состояло в том, чтобы вызвать функцию, используя строковые значения, такие как '1.0', определить точку и использовать parseFloat или parseInt.

Любое предложение об этом?

+0

Зачем вам нужен '1.0' по сравнению с' 1'? Они одинаковы. JavaScript не имеет понятия 'int' или' float', просто 'number'. –

+1

Что такое функция, которую вы написали? Почему это имеет значение, если это 'int' или' float'? –

+0

Функция возвращает случайное число, например. между А и В. В зависимости от начального значения он может быть истребителем 4,10 => 7 (int) или 1,5, 12 => 4,25 - вы получаете точку. – naden

ответ

4

Вы подтвердили, что JavaScript имеет только один тип Number. Таким образом, 1 идентичен 1.0.

Если вам это необходимо для отображения, вы должны использовать toFixed.

1..toFixed(1); // "1.0" 
+0

Это не для демонстрации. В зависимости от результата операции функция возвращает значение float или int, используя синтаксический анализ (тип). – naden

+0

@naden: Вы можете использовать 'parseFloat' на" ints "тоже. 'parseFloat ('12 ') === 12'. –

+1

@naden: Я не понимаю. Вы уже заявили, что знаете, что такого различия в JavaScript нет.Если вы хотите, чтобы JavaScript вел себя так, как будто существует различие, когда его нет, то, помимо использования строк, я боюсь, что вам не повезло. –

0
number%1===0 

Если это условие true, это целое число, в противном случае это поплавок

+0

С другой стороны, это может не сработать с 1.0 :( – kidwon

+0

К сожалению, для случая я указал, что вы ошибаетесь, из-за принудительного «приведения». Вы можете запустить пример кода, чтобы увидеть его prooven. – naden

+0

Я не неправильно, это просто способ работы js. В любом случае теперь вам нужно изменить один из 10, который намного лучше. http://jsfiddle.net/EKmT3/5/ – kidwon

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