javascript百分比问题
我试图计算以下公式,根据用户的输入返回0-100(a等级)的数值 分数=考试价值×考试分数+(100%− 考试价值)×当前成绩 我用下面的代码来做这件事javascript百分比问题,javascript,math,Javascript,Math,我试图计算以下公式,根据用户的输入返回0-100(a等级)的数值 分数=考试价值×考试分数+(100%− 考试价值)×当前成绩 我用下面的代码来做这件事 var total = ExamWorth * ExamScore + (100 - ExamWorth) * CurGrade; 我的3个变量是从html中提取出来的 <input type="text" class="form-control" id="aimGrade"> 然而,当我尝试和计算时
var total = ExamWorth * ExamScore + (100 - ExamWorth) * CurGrade;
我的3个变量是从html中提取出来的
<input type="text" class="form-control" id="aimGrade">
然而,当我尝试和计算时,我总是得到错误的答案,我相信我不知道如何将其转换为十进制
例如,ExamWorth=50 ExamCore=80和curGrade=70的输入应返回值90。我得到了7500的回报,同样的投入 我猜你把100%和100%混为一谈了 如果
ExamWorth
是介于0
和1
之间的值,则应使用1-ExamWorth
而不是100-ExamWorth
var total = ExamWorth * ExamScore + (1 - ExamWorth) * CurGrade;
如果ExamWorth
是介于0
和100
之间的值,则需要除以100
var total = (ExamWorth * ExamScore + (100 - ExamWorth) * CurGrade) / 100;
使用您给出的示例,您将得到
75
(而不是7500
),这是计算最终分数的正确数字。我猜您将100%和100%混为一谈
如果ExamWorth
是介于0
和1
之间的值,则应使用1-ExamWorth
而不是100-ExamWorth
var total = ExamWorth * ExamScore + (1 - ExamWorth) * CurGrade;
如果ExamWorth
是介于0
和100
之间的值,则需要除以100
var total = (ExamWorth * ExamScore + (100 - ExamWorth) * CurGrade) / 100;
使用您给出的示例,您将得到
75
(而不是7500
),这是计算最终分数的正确数字。也许您可以将输入数字设置为:
<input type="number" class="form-control" id="aimGrade" min="0" max="100" />
最后,您可能需要重新进行计算。如果ExamWorth是100分之一(即百分比),则需要将最终结果除以100:
var total = (ExamWorth * ExamScore + (100 - ExamWorth) * CurGrade) / 100;
如果它真的是一个小数/比例(即介于0和1之间的值),则应为:
var total = ExamWorth * ExamScore + (1 - ExamWorth) * CurGrade;
也许您可以将您的输入编号为:
<input type="number" class="form-control" id="aimGrade" min="0" max="100" />
最后,您可能需要重新进行计算。如果ExamWorth是100分之一(即百分比),则需要将最终结果除以100:
var total = (ExamWorth * ExamScore + (100 - ExamWorth) * CurGrade) / 100;
如果它真的是一个小数/比例(即介于0和1之间的值),则应为:
var total = ExamWorth * ExamScore + (1 - ExamWorth) * CurGrade;
您的问题不会转换为十进制(当您除以100时,7500不会变成90)。您的算法完全错误。 请参见注释中的算法说明 此外(仅供参考),在处理来自用户提供的数据的值时,有两件事需要记住:
var-worth=document.getElementById(“worth”);
var分数=document.getElementById(“分数”);
var等级=document.getElementById(“等级”);
document.getElementById(“calc”).addEventListener(“单击”,函数)(){
//将字符串转换为数字的方法有很多(没有双关语)
var-worthVal=parseInt(worth.value,10);//显式
var scoreVal=+score.value;//强制
var gradeVal=Number(grade.value)//函数
//算法:
var examPer=(scoreVal/100)*worthVal;//%的考试成绩
var gradeAvg=gradeVal+examPer/2;//等级的平均值
//运算顺序:括号、指数、乘法、除法、加法、减法
//由于该字符串的原因,它两侧的任何操作数通常都会转换为字符串
//如果我们试图同时做所有的数学运算,我们必须非常小心操作的顺序
console.log(“结果1:+(gradeVal+((scoreVal/100)*worthVal)/2”);
//但是,如果我们分步计算,把结果和信息放在一起,就会简单得多
控制台日志(“结果2:+gradeAvg);
});代码>
您的问题没有转换为十进制(当您除以100时,7500不会变成90)。您的算法完全错误。
请参见注释中的算法说明
此外(仅供参考),在处理来自用户提供的数据的值时,有两件事需要记住:
从HTML中提取的所有值都将是字符串
算法中的操作顺序可能会导致字符串
串联而不是数学加法
下面是一个示例(单击展开代码段):
var-worth=document.getElementById(“worth”);
var分数=document.getElementById(“分数”);
var等级=document.getElementById(“等级”);
document.getElementById(“calc”).addEventListener(“单击”,函数)(){
//将字符串转换为数字的方法有很多(没有双关语)
var-worthVal=parseInt(worth.value,10);//显式
var scoreVal=+score.value;//强制
var gradeVal=Number(grade.value)//函数
//算法:
var examPer=(scoreVal/100)*worthVal;//%的考试成绩
var gradeAvg=gradeVal+examPer/2;//等级的平均值
//运算顺序:括号、指数、乘法、除法、加法、减法
//由于该字符串的原因,它两侧的任何操作数通常都会转换为字符串
//如果我们试图同时做所有的数学运算,我们必须非常小心操作的顺序
console.log(“结果1:+(gradeVal+((scoreVal/100)*worthVal)/2”);
//但是,如果我们分步计算,把结果和信息放在一起,就会简单得多
控制台日志(“结果2:+gradeAvg);
});代码>
你能给出一些输入示例以及你得到的和你期望得到的吗?请发布一篇文章你能给出一些输入示例以及你得到的吗