Javascript: округлите до 5 до ближайшего, затем найдите общий знаменатель

Я ищу способ округлить до И до ближайшего 5, а затем найти большой общий знаменатель двух чисел. Мне это нужно для подписи y-шкалы на графике.

Это мой код до сих пор:

<code>function toN5( x ) {
    var i = 1;
    while( x >= 100 ) {
        x/=10; 
        i*=10;
    }
    var remainder = x % 5;
    var distance_to_5 = (5 - remainder) % 5;
    return (x + distance_to_5) * i;
}
</code>

Цель примерно такая: Максимальное значение (округление до ближайшего 5)

<code>1379.8 -> 1500
</code>

И наоборот - минимальное значение (округление до ближайших 5)

<code>41.8 -> 0
</code>

Тогда я хочу найти общий знаменатель, как 250 или 500

0 -> 250 -> 500 -> 750 -> 1000 -> 1250 -> 1500

или же:

<code>0 -> 500 -> 1000 -> 1500
</code>

Есть ли способ сделать что-то подобное? большое спасибо

 devnull6910 мая 2012 г., 16:13
1379,8, округленное до ближайшего 5, будет 1380. Вы имеете в виду "до ближайшего 500"?
 Blazemonger10 мая 2012 г., 16:14
Что именно вы подразумеваете под округлением до ближайшей 5? В первом и втором примерах вы фактически округляете до ближайших 500. Или до ближайших 250, в зависимости от того, как вы на это смотрите.

Ответы на вопрос(3)

С помощьюэтот API, вы можете округлить любое число до ближайшего кратного любого числа, вверх или вниз, с помощью этой команды:

$scm.round(number to be rounded).toNearest(multiple to which you want to round);

Например, если вы хотите округлить 536 до ближайших 500, вы должны использовать:

$scm.round(536).toNearest(500);

 04 авг. 2017 г., 02:40
К сожалению, я только что понял, вопрос был задан 5 лет назад. Может ли админ закрыть это? Кажется, что нет никакой активности ...

Если бы вы хотели округлитьx с точностью до 500 вы можете разделить его на 500, округлить до ближайшего целого числа, а затем снова умножить на 500:

x_rounded = 500 * Math.round(x/500);

Округлить до ближайшегоyзамените 500 наy:

x_rounded = 250 * Math.round(x/250);
 03 апр. 2016 г., 03:20
Спасибо за ответ. Слишком плохие вопросы, подобные этому, закрываются. Это явно помогает людям.
 14 февр. 2016 г., 17:07
Очень хороший ответ. Если бы я хотел приблизиться к 0.05 или 0.1, мне просто нужно сделать 0.05 * Math.round (x / 0.05)
 Fargho10 мая 2012 г., 17:00
Звучит здорово, но проблема в том, что значения могут быть огромными и очень маленькими. Для примера 1500 и 0,23.
 10 мая 2012 г., 21:47
Тогда вы должны быть более конкретными для нас о том, как вы хотите округлить число. В настоящее время ваш вопрос фактически не говорит о том, что вы, очевидно, имеете в виду.

Надеюсь, моя математика верна, но есть несколько способов «округления».

function sigfig(n, sf) {
    sf = sf - Math.floor(Math.log(n) / Math.LN10) - 1;
    sf = Math.pow(10, sf);
    n = Math.round(n * sf);
    n = n / sf;
    return n;
}

function precision(n, dp) {
    dp = Math.pow(10, dp);
    n = n * dp;
    n = Math.round(n);
    n = n / dp;
    return n;
}

function nearest(n, v) {
    n = n / v;
    n = Math.round(n) * v;
    return n;
}

демонстрация

Ваш ответ на вопрос