Проверка количества шагов в JavaScript? - PullRequest
0 голосов
/ 20 июня 2020

Как вы проверяете число, чтобы убедиться, что оно попадает на правильный шаг? Я знаю, что это можно сделать с помощью HTML с атрибутом step . Как это сделать, используя только JavaScript для проверки интервалов шагов. Вот мой сценарий, и он работает большую часть времени. Я сделал тот же сценарий в PHP, и у меня нет никаких проблем.

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

input HTML tag имеет встроенную проверку шага, и, например, -44,667 - допустимый интервал шага.

Есть ли лучший способ сделать это в JS и PHP?

<input type="number" min="-45" step="0.333" value="-45">

<script>

var number = -44.667
var step = 0.333;
var min = -45;



//Detects if min is 0 or less
if (min <= 0) {
    var stepNumber = number + Math.abs(min);
}

else {
    var stepNumber = number - min;
}



//This will see if the steps intervals are valid in the number. If stepMultiplier is a integer number, it is valid. If it is a float number, it is not valid.
var stepMultiplier = stepNumber / step;


//Detect if the number is a float number
if (stepMultiplier % 1 !== 0) {
    console.error('Step invalid');
}

</script>

1 Ответ

0 голосов
/ 20 июня 2020
const number = -44.667
const step = 0.333
const min = -45

function isInRange(number, { max, min, step } = {}) {
  if (max && max < number) return false
  if (min && min > number) return false
  if (step) {
    const tempNumber = number - min
    if (tempNumber.toPrecision(12) % step !== 0) return false
  }
  return true
}

console.log(isInRange(number, { min, step }))

Обратите внимание, что toPrecision требуется для обработки ошибок с плавающей запятой. Сообщите мне, есть ли более элегантное решение для исправления этого.

...