我目前正在努力使下面的calcRatio函数正确计算。这可能是基础数学!
以下功能可以正常工作:
function calcRatio(){
var r = frontRing.value/backCog.value;
return r;
}
例如frontRing = 52,backCog = 11 r = 4.7272 ....
下面给我错误的结果:
function calcRatio(){
var r = frontRing.value/(backCog.value + 5);
return r;
}
例如frontRing = 52,backCog = 11 r = 0.4521。
我最终希望将5与参数交换。
我也无法在函数中不将frontRing和backCog变量设置为.value。这可能是造成问题的原因吗?
Codepen link
最佳答案
当您希望提取的值是一个字符串并进行其他计算时,最好使用
parseInt( value , 10) - for integers
parseFloat( value ) - for decimals
在用例
var r = frontRing.value/(backCog.value + 5);
中backCog.value
是字符串,因为它是输入元素的值。当您使用+
添加数字时,它将执行级联而不是加法。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);
}