2015-08-25 6 views
0

Я использую функцию для проверки того, является ли число, переданное как параметр, плавающим или целым числом в JavaScript.
Метод работает для чисел, таких как «4.34», то есть с ненулевым десятичным значением, но он не подходит для чисел, таких как «3.0», возвращая целое число вместо float.
Это код, который я смог придумать до сих порКак различать одно-десятичное число с плавающей точкой и целое число в JavaScript

function dataType(x) { 
    if (typeof x === 'number' &&){ 
     if (Math.round(x) === x){ 
      return 'integer'; 
     } 
     return 'float'; 
    } 
} 

console.log(dataType(8)); //integer 
console.log(dataType(3.01)); //float 
console.log(dataType(3.0)); // should return float 

Я бы очень признателен за помощь о том, как сделать это в JavaScript.
Спасибо заранее.

Обновление: Я хочу console.log(dataType(3.0));, чтобы вернуть поплавок.

+0

http://stackoverflow.com/questions/10590973/check-if-input-is-float-or-integer – SaggingRufus

ответ

4

Каждое число в JS является поплавком. Существует только один тип номера в JS (Number).

Таким образом, нет кросс-браузерный способ гарантировать разницу между:

3 
3.0 
3.0000000000000 

и так далее.

Даже в современном браузере, (3.0000).toString() === "3"; //true.

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

2

Я не верю, что это возможно, если только у вас нет доступа к строковому представлению значения до того, как оно станет числом. JavaScript отбрасывает эту информацию.

Какая проблема вы пытаетесь решить, что гарантирует эту дифференциацию?

+0

Это был вопрос, заданный в классе. Я просто хотел узнать, возможно ли, чтобы это было сделано. – kevgathuku

0

Try This

function dataType(x) { 
    if (typeof x === 'number'){ 
     if (Math.round(x) === x && x.toString().indexOf('.') < -1){ 
      return 'integer'; 
     } 
     return 'float'; 
    } 
} 
+0

К сожалению, это не работает, потому что 'x.toString()' не сохранит '.0' – ryachza

+0

Gotcha! похоже, что-то, что по-настоящему невозможно сделать. – dburgess923

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