Тип ввода номер, десятичное значение

#javascript

#javascript

Вопрос:

Как проверить, содержит ли номер типа ввода максимум 3 десятичных знака, без использования регулярных выражений

 let x = 1.5555
let y = 1.55
x is false
y is true
 

Комментарии:

1. Вы уверены в своем примере? x содержит более 3 десятичных знаков и y содержит только 2; если вы хотите проверить числа, содержащие максимум 3 десятичных знака, x должно быть false и y должно быть true , а не наоборот.

2. да, верно, я исправляю это, спасибо

3. Любая рациональная причина, почему бы не использовать RegExp для этого?

4. Существует довольно много ситуаций, когда лучше обратиться к другому инструменту вместо регулярного выражения. Например: регулярное выражение не подходит для синтаксического анализа HTML, потому что HTML не является обычным языком. Регулярное выражение, вероятно, не будет тем инструментом, к которому нужно обращаться при разборе исходного кода.

5. Да, хотя регулярное выражение больше не ограничивается только обычными языками. В любом случае, ваша задача надежно выполняется с помощью регулярного выражения, в этом случае нет причин избегать его.

Ответ №1:

Вы можете использовать формулу типа:

 (x * 1000) % 1 === 0
 

Для чисел с 3 или менее десятичными x*1000 знаками он преобразует его в целое число. Например:

 1.55 -> 1550
1.555 -> 1555 
 

Для чисел с более чем 3 десятичными знаками выполнение x*1000 не преобразует его в int, оно только сдвинет части числа:

 1.5555 -> 1555.5 // still a decimal
 

Затем % 1 проверка получает остаток от приведенного выше числа, если его нужно было разделить на 1. Если остаток равен 0, то число было преобразовано в целое число, если оно больше 0, то x*1000 не удалось преобразовать число в int, что означает, что оно имеет более 3 десятичных знаков:

 const validate = x => (x * 1000) % 1 === 0;

console.log(validate(1.5555)); // false
console.log(validate(1.55)); // true
console.log(validate(1.555)); // true
console.log(validate(0.00000001)); // false 

Ответ №2:

Вы можете преобразовать в строку, используя toString() метод, затем разделить в точке . с .split() помощью метода, в результате чего получится массив. Первый элемент в массиве — это строка, содержащая целую часть числа, которая нам здесь не интересна. Второй элемент с индексом 1 в результирующем массиве представляет собой десятичную часть в виде строки.

Теперь вы можете проверить свойство length этой строки, если оно равно или меньше трех, что означает, что оно содержит три или менее десятичных чисел, тогда мы возвращаем true в функции проверки, когда нет, мы возвращаем false .

 const x = 1.5555;
const y = 1.555;
const z = 1.55


function validate(num){
return num.toString().split(".")[1].length <= 3;
}

console.log(validate(x));
console.log(validate(y));
console.log(validate(z)); 

Ответ №3:

Это может решить вашу проблему

 let x = 1.5555;
let y = 1.55;
int length = x.Substring(number.IndexOf(".")).Length;
bool result = length > 3 ? true: false;