Как округлить число либо до ближайшей половины, либо до ближайшего целого числа?

637
03 сентября 2017, 04:27

Привет. Как округлить, например, число 2,35 до 2,5 и число 3,76 до 4 при помощи JS? Нужна динамическая система, которая могла бы округлять число до ближайшей половины, либо до целого числа.

Answer 1

Исходя из того как я понял поставленную задачу (только для положительных чисел больше либо равных 1):

function numRound(num) { 
    let d = Math.floor(num), 
      i = num%d; 
    return i < .25 ? d : (i < .75 ? d + .5 : d + 1); 
} 
 
console.log(numRound(2));    // 2 
console.log(numRound(2.01)); // 2 
console.log(numRound(2.24)); // 2 
console.log(numRound(2.25)); // 2.5 
console.log(numRound(2.5));  // 2.5 
console.log(numRound(2.74)); // 2.5 
console.log(numRound(2.75)); // 3 
console.log(numRound(2.99)); // 3 
console.log(numRound(3));    // 3

Answer 2

1) Умножить на 2.
2) Округлить до ближайшего целого.
3) Разделить на 2.

function numRound(num) { 
    return Math.round(num * 2) / 2; 
} 
 
console.log(numRound(2));    // 2 
console.log(numRound(2.01)); // 2 
console.log(numRound(2.24)); // 2 
console.log(numRound(2.25)); // 2.5 
console.log(numRound(2.5));  // 2.5 
console.log(numRound(2.74)); // 2.5 
console.log(numRound(2.75)); // 3 
console.log(numRound(2.99)); // 3 
console.log(numRound(-1.01));// -1 
console.log(numRound(-1.26));// -1.5 
console.log(numRound(-1.74));// -1.5 
console.log(numRound(-1.76));// -2 
console.log(numRound(-0.26));// -0.5

Можно сделать универсальную функцию, в которую передавать точность:

    function numRound(num, precision) { 
        return Math.round(num / precision) * precision; 
    } 
 
console.log(numRound(2, 0.5));    // 2 
console.log(numRound(2.31, 0.5)); // 2.5 
console.log(numRound(2.24, 0.2)); // 2.2 
console.log(numRound(2.51, 0.2)); // 2.6 
console.log(numRound(153, 2));    // 154 
console.log(numRound(170, 50));   // 150 
console.log(numRound(206, 10));   // 210

Answer 3

Используй Math.round. Если после применения оного результат меньше исходного, то значит к результату надо прибавить 0.5. Для чисел от N.5 Math.round выдаст целое число

READ ALSO
получение данных из другого сайа

получение данных из другого сайа

Привет друзя нужно парсить осюда https://blockchaininfo/ru/ticker на свой сайт

432
Правильное получение данных из сессий и куки

Правильное получение данных из сессий и куки

Есть корзина в интернет-магазинеТовар в нее добавляется либо с помощью сессий, либо через куки

424
Идентификатор для Google chars элементов

Идентификатор для Google chars элементов

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

396
Установка Permissions в android приложении

Установка Permissions в android приложении

Есть приложение, написанное на React Native, в манифесте которого прописаны следующие разрешения:

419