#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;