【问题标题】:Electricity units calculator电力单位计算器
【发布时间】:2013-02-02 06:02:02
【问题描述】:

我基本上是使用函数和 if else if 语句来构建电量读数计算器。

给出的单位是 1236,它是名为 elecReading 的函数的参数。这将用作使用的单位数量,并将计算必须支付的金额。

但是,前 0-500 个单位的费用为每单位 1 美元。接下来的 500-1000 个单位按每单位 1.10 美元计费,超过 1000 个单位按每单位 3.20 美元计费。例如,如果我使用 1000 个单位,我的账单将是 1050 美元。

我不确定如何在不手动将 1236 分解为单数的情况下使其工作。如何用 JavaScript 编写这样的计算器?

显然,我不是在要求完整的答案,但在这个阶段朝着正确的方向推进会非常有帮助!

提前感谢您的帮助

【问题讨论】:

  • 为什么这被否决了?这是一个非常好的问题。
  • 假设我使用了 1000 个单位。这是否意味着我的账单是 500 美元 + 550 美元?还是我的账单是 1100 美元?
  • 布拉德据我所知是 1050 美元

标签: javascript function parameters units-of-measurement


【解决方案1】:

静态版本类似于:

var UNIT_PRICE_1001_OVER = 3.20;
var UNIT_PRICE_501_1000 = 1.10;
var UNIT_PRICE_UNDER_500 = 1.00;
function elecReading(units) {
    var price = 0;

    if (units > 1000) {
        price += (units-1000) * UNIT_PRICE_1001_OVER;
        units = 1000;
    }
    if (units > 500) {
        price += (units - 500) * UNIT_PRICE_501_1000;
        units = 500;
    }
    price += units * UNIT_PRICE_UNDER_500;

    return price;
}

这是假设单价范围为 1-500、501-1000、1001-Inf。显然,这可以更普遍/使用更少的硬编码来完成,使用代表价格范围 + 所述范围内每单位价格的对象列表。

【讨论】:

  • 呃,纠正了一个大错误,那里不应该有任何else 语句。显然,所有价格范围的单位都必须计算在内。
【解决方案2】:

尝试以下功能。假设高峰费率来自 1000+ 单位,中等费率来自 501-1000,非高峰费率来自 0-500。

您可以根据您的要求/理解更改变量名称。

已编辑: 添加while循环以不断减少总单位,直到它们大于1000

       function elecReading(units){

        var totalUnits=units;
        var offPeakRate=1;
        var mediumRate=1.10;
        var peakRate=3.20;
        var totalCharges=0;

        if(totalUnits>1000){
            PeakUnits = totalUnits-1000;
            totalCharges = totalCharges + (PeakUnits * peakRate);
            totalUnits = 1000;
        }

        if(totalUnits > 500){
            totalUnits = totalUnits-500;
            totalCharges =  totalCharges + (totalUnits * mediumRate);
        }  

        totalCharges = totalCharges + (totalUnits * offPeakRate); 

        return totalCharges;
    } 
  console.log(elecReading(2000));

【讨论】:

  • 这是非常不正确的。 (考虑当2000 单位用完时会发生什么。)
  • @millimoose:很好,我之前没有意识到......现在怎么样?
  • 只有当 while 循环运行两次时,2000 才正确。如果您尝试更高的数字,例如elecReading(3000),它将最终计算几个“峰值”单位两次(或更多次)。您根本无法在提高价格的同时继续扣除 1000 个单位,您必须在处理完剩下的 1000 个以外的所有单位后,将剩余的单位设置为 1000 个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 2014-09-08
  • 2017-01-30
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多