在十进制小时内添加/减去分钟数

时间:2014-09-30 03:32:25

标签: javascript jquery math

当我尝试添加15分钟然后减去5分钟3次时,我收到错误2.7755575615628914e-17。应该是零而不是。请帮忙。

http://jsfiddle.net/3zq4napd/

$(document).on('click', '.add', function(event) {
    var input = $('input');

    var inputVal = parseFloat($('input').val());
    var addVal = parseFloat($(this).data('num'));
    var newVal = inputVal + (addVal / 60);

    $(input).val(newVal);
});

$(document).on('click', '.sub', function(event) {
    var input = $('input');

    var inputVal = parseFloat($('input').val());
    var subVal = parseFloat($(this).data('num'));
    var newVal = inputVal - (subVal / 60);

    $(input).val(newVal);
});

1 个答案:

答案 0 :(得分:1)

处理浮点数时的正常行为:它们可以用二进制精确表示,但并非所有这些都可以用十进制表示。舍入应该有所帮助。

编辑:避免浮点错误的最佳方法是避免处理不能以二进制形式表示的数字 - 即避免除2的幂之外的任何除法。由于60不是2的强项,因此除以60将为浮点错误打开大门。因此,如果您可以在几分钟,几秒或(JavaScript标准)毫秒内完成计算,那么您将完全保留在整体土地上。

(你甚至可以计算20分钟的积木,因为你的最小单位是5分钟,20 / 2^2,所以你仍然是二元安全的。但如果算上几个小时(即六十分钟) -minute blocks),3进一步划分;由于3的分数不能用二进制表示,弹出错误。)