Я бы упростил все это с помощью именованных переменных и объектов, которые имеют смысл, не проверены, но должны работать:
// Declare Constants
var rates = {
Oil: 0.0816, // Rate for Oil
StorageHeater: 0.0963, // Rate for NightRate
NaturalGas: 0.0558, // Rate for Gas
LPG: 0.1579, // Rate for LPG
Coal: 0.121, // Rate for Coal
WoodPellets: 0.0828, // Rate for Pellets
HeatPump: 0.02675 // Rate for Heat Pump
};
var x = 1226.4;
// Calculate H (Ground Sourced Heat Pump)
$jq(".es-calculate").click(function(){
$jq(".es-result-wrap").slideDown(300);
var normalizedTotal = 0;
var total = 0;
$jq.each({
Oil: $jq('input.es-oil').val(),
StorageHeater: $jq('input.es-storage').val(),
NaturalGas: $jq('input.es-gas').val(),
LPG: $jq('input.es-lpg').val(),
Coal: $jq('input.es-coal').val(),
WoodPellets: $jq('input.es-pellets').val()
}, function(key, value) {
// make sure the value is a float and not a string:
value = parseFloat(value);
// calculate our two totals
normalizedTotal += value / rates[key];
total += value;
});
var Occupants = parseInt($jq("input.es-occupants").val(), 10);
var H = total - (normalizedTotal * rates.HeatPump);
var I = total / normalizedTotal * Occupants * x;
$jq("span.es-result-span-h").text(H.toFixed(2));
$jq("span.es-result-span-i").text(I.toFixed(2));
});
Я также немного изменил математику, так как 0 в дивиденде отменяетдругие части в большинстве мест, и в некоторых формулах было несколько лишних.Кроме того, вышеупомянутое использует объект для хранения тарифов немного более чистым способом, используя соглашение.Создание этой вики, чтобы кто-нибудь еще мог ее улучшить.
Редактировать: Превратил расчет normalizedTotal
и total
в более простой $.each()