当我尝试添加15分钟然后减去5分钟3次时,我收到错误2.7755575615628914e-17
。应该是零而不是。请帮忙。
$(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);
});
答案 0 :(得分:1)
处理浮点数时的正常行为:它们可以用二进制精确表示,但并非所有这些都可以用十进制表示。舍入应该有所帮助。
编辑:避免浮点错误的最佳方法是避免处理不能以二进制形式表示的数字 - 即避免除2
的幂之外的任何除法。由于60
不是2
的强项,因此除以60
将为浮点错误打开大门。因此,如果您可以在几分钟,几秒或(JavaScript标准)毫秒内完成计算,那么您将完全保留在整体土地上。
(你甚至可以计算20分钟的积木,因为你的最小单位是5分钟,20 / 2^2
,所以你仍然是二元安全的。但如果算上几个小时(即六十分钟) -minute blocks),3
进一步划分;由于3
的分数不能用二进制表示,弹出错误。)