Преобразование пикселей в минуты - PullRequest
3 голосов
/ 26 сентября 2011

У меня есть приложение, в котором я конвертирую пиксели в минуты и часы.В основном, в качестве единицы измерения используются минуты:

120 минут = 240 px

Я запускаю эту функцию с помощью этой функции:

convertToTime: function (min) {
    var hours = Math.floor( min / 60);          
    var minutes = Math.round(min % 60);
    if (minutes < 10) {
        minutes = "0" + minutes;
    }
    if (hours > 12) {
        hours = hours % 12;
    }
    return hours + ":" + minutes;
}

Он возвращает все правильно, кромекогда минуты достигают 60. Так, например, он возвращает:

12: 58 12:59 12: 60

Это не то, что я хочу, потому что это не в реальном времени.

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

Спасибо за любую помощь, спасибо!

Ответы [ 3 ]

5 голосов
/ 26 сентября 2011

До Math.floor(min) % 60 вместо Math.round(min % 60).

% является оператором модуля.x % 60 всегда будет давать целочисленное значение в диапазоне от 0 до 59 включительно для положительного целого числа x, что и требуется для отображения минут.Ваша проблема в том, что min не является целым числом - ровно половина времени, поскольку вы получаете его путем деления целого числа на 2. В частности, когда количество пикселей равно 119, min равно 59,5, а Math.round() будетокруглите его до 60. Поскольку % вряд ли будет делать то, что вы хотите для входных данных с плавающей запятой в целом, правильное решение состоит в том, чтобы убедиться, что значение является целым числом, прежде чем вычислять его модуль, вместо того, чтобы пытаться округлить его впоследствии.

1 голос
/ 26 сентября 2011

Вы используете Math.floor для часов, а Math.round для минут. Вы можете решить вашу проблему, используя Math.floor для них обоих!

convertToTime: function (min) {
    var hours = Math.floor( min / 60);          
    var minutes = Math.floor(min % 60);
    if (minutes < 10) {
        minutes = "0" + minutes;
    }
    if (hours > 12) {
        hours = hours % 12;
    }
    return hours + ":" + minutes;
}
0 голосов
/ 26 сентября 2011

Тебе тоже нужно сделать

Math.round(Math.round(min) % 60)

или

Math.round(Math.floor(min) % 60)

или

Math.round(Math.ceil(min) % 60)

когда вы используете float, вы можете получить эту ошибку ... пример Math.round (59.5% 60)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...