我目前正在努力使下面的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);
}

07-24 15:20