Google Sheets FLOOR函数在相同场景下返回不同结果的问题咨询
Google Sheets FLOOR函数在相同场景下返回不同结果的问题咨询
嘿,这个问题其实是Google Sheets里常见的浮点数精度误差导致的,咱们一步步拆解来看:
你的测试数据
Date Set 1
- Time IN: 5/19/2024, 16:00:00(单元格A3)
- Time OUT: 5/20/2024, 00:30:00(单元格B3)
- 显示的Duration(C3):8.50
- 计算公式:
=(B3 - A3)*24
Date Set 2
- Time IN: 5/29/2024 15:30:00(单元格A4)
- Time OUT: 5/30/2024 0:00:00(单元格B4)
- 显示的Duration(C4):8.50
- 计算公式:
=(B4 - A4)*24
你遇到的异常情况
执行
FLOOR(C3-8,0.5)返回0.5,但FLOOR(C4-8,0.5)却返回0.0,明明两个Duration显示都是8.50,结果却不一致。
问题根源
核心原因是浮点数的存储精度限制:
虽然Google Sheets显示C4的值是8.50,但它实际存储的可能是一个非常接近8.5但略小于8.5的数值(比如8.499999999999998)。这是因为日期时间在Google Sheets里是以数字形式存储的(1天=1,1小时=1/24),某些时间组合的计算会因为二进制浮点数的局限性,产生肉眼不可见的微小偏差。
当你计算C4-8时,得到的是一个略小于0.5的数,FLOOR函数会向下取到最接近的0.5倍数,也就是0.0;而C3的计算结果是精确的8.5,所以C3-8=0.5,FLOOR自然返回0.5。
解决办法
你可以通过ROUND函数先修正数值的精度,再使用FLOOR,就能得到一致的结果:
修正差值后再计算
=FLOOR(ROUND(C3-8, 2), 0.5) =FLOOR(ROUND(C4-8, 2), 0.5)直接在时间差计算时处理精度
=FLOOR(ROUND((B3 - A3)*24 - 8, 2), 0.5) =FLOOR(ROUND((B4 - A4)*24 - 8, 2), 0.5)
这样就能规避浮点数精度带来的异常,准确计算出员工的加班时长啦。
备注:内容来源于stack exchange,提问作者Dorcas Domingo
相关产品推荐
相关产品推荐

