我正在尝试制作计算加班时间的电子表格,如下所示: 如果任务在下午2点后开始,则小时计算为一个半小时 如果任务在上午12点之后开始,则小时计算为2小时 我在E栏写了以下公式:
var ItemSchema = new Schema({
name: String,
price: Number
});
// Getter
ItemSchema.path('price').get(function(num) {
return (num / 100).toFixed(2);
});
// Setter
ItemSchema.path('price').set(function(num) {
return num * 100;
});
但是我错误的结果我哪里出错了?
谢谢
答案 0 :(得分:1)
您的公式的问题在于您将午夜12:00视为午夜。或24:00。如果您查看G2,您将在Excel中看到12:00 AM或(24:00)它存储为0.您的逻辑检查是检查是否有任何小于零。假设你从不处理负时间,你的结果总是假的,因为没有时间小于零。
我会改变你的布局并添加一个没有加班的班次3。当有人在上午9点开始时会发生什么?
如果您必须按原样保留布局,我会将单元格D5中的公式更改为:
=HOUR(C5-B5)
然后确保单元格D1,D2,D5和E5都是通用格式,因为它们只是数字而不是实际时间。
接下来将G2设置为等于08:00
将您在E5中的公式更改为:
=IF(B5<G2,D5*D2,IF(B5>=G1,D5*D1,D5))
or
=D5*IF(B5<G2,D2,IF(B5>=G1,D1,1))
看看是否能让你更进一步。
需要注意的一点是,Excel会以十进制格式存储时间,这可能会让您失望。当你在一个单元格中看到12点PM时,你可能会认为你正在处理12,但是真正存储在那个单元格中的excel是0.5,因为它是一天中途。 24:00不存在Excel公式将其视为0,如果它作为公式的输入提供。 VBA不接受它。有效的Excel时间范围为00:00至23:59。
现在已经说过了,如果你严格看8小时轮班并且只关心开始时间,你可以简单地做一个if语句说IF(开始时间=班次1开始时间,然后乘以班次1率,IF (开始时间=班次2开始时间,然后乘以班次2率,无特殊率))
要考虑的其他事情,如果你正在考虑实际的开始时间,并且一个人在一个班次开始但在下一个班次结束时会发生什么?