这个加班总数没有正确计算的原因是什么

What is the reasoning behind this overtime total not being calculated correctly?

本文关键字:计算 是什么 加班      更新时间:2023-09-26

这里有一点解释。停车库收费 5.00 美元,停车最多 3 小时。超过三小时,车库每小时或部分每小时额外收取1.50美元。任何给定的 24 小时期间的最高费用为 18.00 美元。我们假设每次停车时间不超过 24 小时。

有什么理由为什么超过

3 小时时总数不会计算?我有一种感觉,它与 sum 变量有关,但我不能把手指放在上面。

<script type="text/javascript">
function multiply() {
var hoursParked = document.getElementById('hP').value;
var price = 5.00;
var totalCost = document.getElementById('total');
var totalPayment = (hoursParked * price);
    if (hours < 3) {
    sum = price * hours;
    return sum;   
}
else {
    sum = ((hours - 3) * 0.5 * price) + (price * hours);
    return sum;
} 
totalCost.value= sum; }
</script>
</head>

<body><div align="center">
<form id="1">
<input type="text" id="customerName" name="customerName" placeholder="Please enter your name here." size="27px"><br><br>
<input type="number" id="hP" name="hoursParked" placeholder="Hours parked?" min="1" max="24"><br><br>
<input type="button" id="calculateP" name="calculatePayment" value="Calculate" onclick="multiply()"/>
<input type="reset" id="resetBtn" value="Clear"><br><br>
<input type="number" id="total" name="totalCost" placeholder="Your Total Payment" readonly/><hr>
</form>
</div>
</body>
</html>
function multiply() {
var hoursParked = document.getElementById('hP').value;
var price = 5.00;
var totalCost = document.getElementById('total');
var totalPayment = (hoursParked * price);
    if (hoursParked <= 3) {
    sum = price * hoursParked;
    return sum;   
}
else {
    sum = ((hoursParked - 3) * (price + 1.50)) + (price * 3);
    return sum;
} 
totalCost.value= sum; }

此功能将解决您的问题。试试这个

请尝试这个。

function multiply() {
                    var hoursParked = document.getElementById('hP').value;
                    var price = 5.00;
                    var totalCost = document.getElementById('total');
                    var totalPayment = (hoursParked * price);
                    var sum="";
                    if (hoursParked <= 3) {
                    sum = price * hoursParked;
                    }
                    else {
                     sum = ((hoursParked - 3) * (price + 1.50)) + (price * 3);
                    } 
                    $('#total').val(sum) ;
                }

假设您的意思是前 5.00 小时总计 3 美元(而不是每小时 5.00 美元)
假设您的平均小时数是每小时 1.50 美元(而不是每小时 6.50 美元)

function multiply() {
    var hoursParked = document.getElementById('hP').value;
    var totalCost = document.getElementById('total');
    totalCost.value = getTotalPayment(hoursParked);
}
function getTotalPayment(hoursParked) {
   var basePrice = 5.00;
   var baseHours = 3;
   var maxPayment = 18.00;
   var hourlyRate = 1.50;
   return Math.min(
       basePrice +
       (Math.max(Math.ceil(hoursParked - baseHours), 0) * hourlyRate), 
       maxPayment);
}

我已经分解了getTotalPayment()函数,因此您可以使用一些alert()语句快速尝试它。 以下是一些测试用例:

//should all display 5.00
alert(getTotalPayment(0.00001));
alert(getTotalPayment(1));
alert(getTotalPayment(2));
alert(getTotalPayment(3));
//should display 6.50
alert(getTotalPayment(3.01));
alert(getTotalPayment(3.9));
alert(getTotalPayment(4));
//should display 8
alert(getTotalPayment(5));
//should display 9.50
alert(getTotalPayment(5.01));
alert(getTotalPayment(5.999));
//should display 17
alert(getTotalPayment(11));
//should display 18
alert(getTotalPayment(11.1));
alert(getTotalPayment(12));
alert(getTotalPayment(24));

编辑:阅读OP的澄清评论后

假设前 3 小时
每小时 5.00 美元假设此后的时间每小时 6.50 美元

function getTotalPayment(hoursParked) {
   var initialRate = 5.00;
   var augmentedRate = 6.50;
   var baseHours = 3;
   var maxPayment = 18.00;
   hoursParked = Math.ceil(hoursParked);  //round up any fractional hour
   return Math.min(
       //cost for any hours up to 3
       Math.min(3, hoursParked) * initialRate +
       //cost for any hours beyond 3
       Math.max(hoursParked - baseHours, 0) * augmentedRate, 
       maxPayment);
}

以及具有这些新假设的函数的一些测试用例:

//should return 5
alert(getTotalPayment(0.00001));
alert(getTotalPayment(1));
//should return 10
alert(getTotalPayment(1.5));
alert(getTotalPayment(2));
//should return 15
alert(getTotalPayment(3));
//should return 18
alert(getTotalPayment(3.01));
alert(getTotalPayment(4));
alert(getTotalPayment(11.1));
alert(getTotalPayment(24));