JavaScript: вопрос округления - PullRequest
       8

JavaScript: вопрос округления

0 голосов
/ 12 ноября 2009

Если у меня есть следующее

var lowerBound = 0;
var higherBound = 100;
var inputVar = document.getElementById('input').value;  // e.g. 51

Как программно определить, является ли inputVar ближе к переменной lowerBound или переменной higherBound?

То есть, если пользователь вводит '51', функция должна возвращать '100'. Но если пользователь вводит '49', он должен вернуть '0'.

Ответы [ 5 ]

1 голос
/ 12 ноября 2009

Найдите среднее значение для верхней и нижней границ, затем проверьте.

function findNearest(num) {
 if((num - 0) !== num) throw "invalid test value";
 var lower = 0;
 var upper = 100;
 var middle = ( upper - lower ) / 2;
 return ( num > middle ? upper : lower );
}

findNearest(2); // lower
findNearest(15.465); // lower
findNearest(50); // lower
findNearest(51); // upper
findNearest(122); // upper
findNearest('asdasd'); // exception
findNearest(null); // exception
0 голосов
/ 12 ноября 2009

Или для математически наклонных:)

var rounded = Math.round(inputVar / 100) * 100;

50 (математически правильно) округлено до 100.

0 голосов
/ 12 ноября 2009

Вам нужно будет решить, хотите ли вы, чтобы значение 50 соответствовало нижней или верхней границе:

var inputVar = parseFloat(document.getElementById('input').value);
inputVar = (inputVar > 50) ? higherBound : lowerBound;
0 голосов
/ 12 ноября 2009

Это должно делать то, что вы хотите:

var inputVar = parseInt(document.getElementById('input').value, 10);
var rounded = (higherBound - inputVar) <= (inputVar - lowerBound) ? higherBound : lowerBound;

Если вы хотите, чтобы 50 округлилось до 0, тогда измените <= на <.

0 голосов
/ 12 ноября 2009

Почему бы не найти разницу между нижним и верхним, а затем:

inputVar = document.getElementById('input').value < middleVal ? lowerBound : upperBound.

Единственная проблема в том, что значение 50?

...