我目前正努力让下面的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而不在函数内执行此操作。这会导致这个问题吗?
答案 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);
}