jQuery - 我从基本的数学公式得到了意想不到的输出

Oll*_*thy 2 javascript math types

嗨,我想先说,我非常感谢任何人的帮助.我建造了一个小型计算器,通过安装地热泵或太阳能电池板来计算消费者每年可以节省的能源数量.

据我所知,数学公式是正确的,我的客户昨天在向我展示代码时验证了这一点.两个问题.首先是计算器输出的第一个结果是可笑的大数字.第二个问题是太阳能结果仅在字段中没有零时才起作用.

关于如何在JS或jQuery中编写数学公式,是否存在一些怪癖?

任何帮助非常感谢.这是链接 - http://www.olliemccarthy.com/test/johncmurphy/?page_id=249

以下是整个功能的代码 -

$jq(document).ready(function(){ 

// Energy Bill Saver 

// Declare Variables 

var A = "";  // Input for Oil
var B = "";  // Input for Storage Heater
var C = "";  // Input for Natural Gas
var D = "";  // Input for LPG
var E = "";  // Input for Coal 
var F = "";  // Input for Wood Pellets
var G = "";  // Input for Number of Occupants 
var J = "";  
var K = "";
var H = "";
var I = "";

// Declare Constants 

var a = "0.0816"; // Rate for Oil
var b = "0.0963"; // Rate for NightRate
var c = "0.0558"; // Rate for Gas
var d = "0.1579";  // Rate for LPG
var e = "0.121";  // Rate for Coal
var f = "0.0828";  // Rate for Pellets
var g = "0.02675";  // Rate for Heat Pump

var x = "1226.4"; 


// Splittin up I to avoid error 

var S1 = ""; // Splitting up the calcuation for I
var S2 = ""; // Splitting up the calcuation for I
var S3 = ""; // Splitting up the calcuation for I
var S4 = ""; // Splitting up the calcuation for I
var S5 = ""; // Splitting up the calcuation for I
var S6 = ""; // Splitting up the calcuation for I



// Calculate H (Ground Sourced Heat Pump)

$jq(".es-calculate").click(function(){


    $jq(".es-result-wrap").slideDown(300);


    A = $jq("input.es-oil").val();
    B = $jq("input.es-storage").val();
    C = $jq("input.es-gas").val();
    D = $jq("input.es-lpg").val();
    E = $jq("input.es-coal").val();
    F = $jq("input.es-pellets").val();
    G = $jq("input.es-occupants").val();


    J = ( A / a ) + ( B / b ) + ( C / c ) + ( D / d ) + ( E / e ) + ( F / f ) ;

    H = A + B + C + D + E + F - ( J * g ) ;

    K = ( G * x ) ;


    if ( A !== "0" ) { S1 = ( ( ( A / a ) / J ) * K * a ) ; }
    else { S1 = "0" ; }

    if ( B !== "0" ) { S2 = ( ( ( B / b ) / J ) * K * b ) ; }
    else { S2 = "0" ; }

    if ( C !== "0" ) { S3 = ( ( ( C / c ) / J ) * K * c ) ; }
    else { S3 = "0" ; }

    if ( D !== "0" ) { S4 = ( ( ( D / d ) / J ) * K * d ) ; }
    else { S4 = "0" ; }

    if ( E !== "0" ) { S5 = ( ( ( E / e ) / J ) * K * e ) ; }
    else { S5 = "0" ; }

    if ( F !== "0" ) { S6 = ( ( ( F / f ) / J ) * K * f ) ; }
    else { S6 = "0" ; }


    I = S1 + S2 + S3 + S4 + S5 + S6 ;


    if(!isNaN(H)) {$jq("span.es-result-span-h").text(H.toFixed(2));}
    else{$jq("span.es-result-span-h").text('Error: Please enter numerals only');}

    if(!isNaN(I)) {$jq("span.es-result-span-i").text(I.toFixed(2));}
    else{$jq("span.es-result-span-i").text('Error: Please enter numerals only');}

    });

});
Run Code Online (Sandbox Code Playgroud)

vsr*_*vsr 7

  • 常量声明为字符串.它们应该是数字型号(浮点数);

var a = 0.0816;

  • 在对字符串(用户输入)进行数学运算时,使用函数parseFloat将它们转换为float;

    A = parseFloat( $jq("input.es-oil").val() );