简单函数参数

时间:2017-07-12 18:25:38

标签: javascript math

我目前正努力让下面的calcRatio函数正确计算。这可能是基本的数学! 以下功能按预期工作:

function calcRatio(){
    var r = frontRing.value/backCog.value;
    return r;
}

e.g。 frontRing = 52,backCog = 11 r = 4.7272 ......

以下给出了错误的结果:

function calcRatio(){
    var r = frontRing.value/(backCog.value + 5);
    return r;
}

e.g。 frontRing = 52,backCog = 11 r = 0.4521。

我最终希望将5与一个参数交换。

我也无法将frontRing和backCog变量设置为.value' s而不在函数内执行此操作。这会导致这个问题吗?

Codepen link

1 个答案:

答案 0 :(得分:1)

如果您希望提取的值是字符串并具有其他计算,则最好使用

parseInt( value , 10) - for integers 
parseFloat( value )   - for decimals

在用例var r = frontRing.value/(backCog.value + 5);

backCog.value是一个字符串,因为它是input元素的值。当您使用+添加数字时,它会执行连接而不是添加。

var backCogValue = backCog.value; // "11";

"11" + 5 --> 115而非16正如您所料。

因此,编写此代码的正确方法是在添加数字之前使用上述任一方法。

var frontRingValue = parseFloat(frontRing.value);
var backCogValue = parseFloat(backCog.value);

var r = (frontRingValue/ (backCogValue + 5)).toFixed(4);

toFixed用于格式化为您期望的小数点数。

如果5是传递给函数的参数,那么您的代码将类似于

function calcRatio(param) {
    var frontRingValue = parseFloat(frontRing.value);
    var backCogValue = parseFloat(backCog.value);
    var paramValue = parseFloat(paramValue);

    var r = (frontRingValue/ (backCogValue + paramValue)).toFixed(4);
}