arrays - 根据阈值将不同的乘数应用于整数
问题描述
我必须构建一个程序来计算电话提供商使用的年度分钟成本,它取决于不同的费率。
例如,一个电话运营商可能有以下费率:
"rates": [
{"price": 15.5, "threshold": 150},
{"price": 12.3, "threshold": 100},
{"price": 8}
],
运营商可以有多个资费,最后一个资费始终没有门槛。
所以在上面的例子中,前 150 分钟按每分钟 15.5 便士收费,接下来的 100 分钟按每分钟 12.3 便士收费,随后的所有分钟按 8 便士收费。
因此,如果:
AnnualUsage = 1000
总成本为 95.55。
我正在努力想象一种方法,该方法可以适应运营商可能拥有的多种关税,并根据阈值将一个值乘以不同的价格。
请帮忙!
解决方案
只是另一种选择,我认为这是不言自明的:
rates = [
{price: 15.5, threshold: 150},
{price: 12.3, threshold: 100},
{price: 8}
]
annual_usage = 1000
res = rates.each_with_object([]) do |h, ary|
if h.has_key?(:threshold) && annual_usage > h[:threshold]
annual_usage -= h[:threshold]
ary << h[:threshold] * h[:price]/100
else
ary << annual_usage * h[:price]/100
end
end
res #=> [23.25, 12.3, 60]
res.sum #=> 95.55
推荐阅读
- s4sdk - 使用 S/4HANA Cloud SDK 使用来自 S/4HANA Cloud 的数据源创建自定义 OData v2 服务:web.xml 错误
- ruby-on-rails - 使用 Capistrano 部署后无法运行 Puma
- linux - Bash shell 脚本文件存在
- sql-server - 如何在 SQL Server 中查找当前值以外的值?
- c++ - 在 C++ 中乘以并显示数组的值
- macos - GAS 32 位程序集中的未定义符号错误
- python - 如何在 PyFPDF 中导出立陶宛字母 (ąčęėįšųūž)?
- c++ - GCC 8 交叉编译器输出 ARMv7 可执行文件而不是 ARMv6
- r - 如何在具有最大范围的两个连续的 4 列中进行选择,并将其划分为在 4 列中的任何一个之间找到的最大范围
- php - Docker PHP/MySQL/Apache 容器