线性功能 [英] Linear function

查看:60
本文介绍了线性功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要编写一个分段函数,可以将百分比从95到65并将其转换为gpa值。技巧是,95 = 4.0,94 = 3.9,93 = 3.8,92 = 3.7,并且每个百分点继续减少.1,直到它达到65 = 1.0。如果不手动输入大量的其他内容,我就会变得难以理解。

  $(#theButton ).click(function(){
var perc = $(#perc)。val();
var hardperc =(1 +((perc-65)/ 10));
perc = parseFloat(perc);


解决方案

如果你想要简单的线性归一化,那么下面的函数应该可以做到。不是使用重复的逻辑或条件,你可以使用一些数学。



  //可重用的线性规范化functionconst linearNormalize =(fromMin,fromMax,toMin,toMax)=> value => {//规范化输入值var pct =(value  - fromMin)/(fromMax  -  fromMin); var normalized = pct *(toMax  -  toMin)+ toMin; // Cap输出到min / max if(normalized> toMax)回到Max; if(normalized< toMin)返回Min; return normalized;} //包装函数与您的特定inputsConst gradeToGpa = linearNormalize(65,95,1.0,4.0); console.log(gradeToGpa(78));  



使用 Scott Sauyet 咖喱功能建议:



< pre class =snippet-code-js lang-js prettyprint-override> const linearNormalize =(fromMin,fromMax,toMin,toMax)=> value => {var pct =(value - fromMin)/(fromMax - fromMin); var normalized = pct *(toMax - toMin)+ toMin; if(normalized> toMax)返回到; if(normalized< toMin)返回Min; return normalized;} const gradeToGpa = linearNormalize(65,95,1.0,4.0); console.log(gradeToGpa(78));


I need to write a piecewise function that can take a percentage from 95 to 65 and convert that to a gpa value. The trick is, 95=4.0, 94=3.9, 93=3.8, 92=3.7, and that continues decreasing by .1 per percentage point until it hits 65=1.0. I'm becoming stumped how to code this without manually entering in a ton of else-ifs.

$("#theButton").click(function() {
    var perc = $("#perc").val();
    var hardperc = (1+((perc-65)/10));
    perc = parseFloat(perc);

解决方案

If you want simple linear normalization then the following function should do the trick. Rather than use repeated logic or conditionals, you can just use some math.

//Reusable Linear Normalization function
const linearNormalize = (fromMin, fromMax, toMin, toMax) => value => {
  //Normalize the input value
  var pct = (value - fromMin) / (fromMax - fromMin);
  var normalized = pct * (toMax - toMin) + toMin;

  //Cap output to min/max
  if (normalized > toMax) return toMax;
  if (normalized < toMin) return toMin;
  return normalized;
}

//Wrapper function with your specific inputs
const gradeToGpa = linearNormalize(65, 95, 1.0, 4.0);

console.log(gradeToGpa(78));

With Scott Sauyet's curried functions suggestion:

const linearNormalize = (fromMin, fromMax, toMin, toMax) => value => {
  var pct = (value - fromMin) / (fromMax - fromMin);
  var normalized = pct * (toMax - toMin) + toMin;

  if (normalized > toMax) return toMax;
  if (normalized < toMin) return toMin;
  return normalized;
}

const gradeToGpa = linearNormalize(65, 95, 1.0, 4.0);

console.log(gradeToGpa(78));

这篇关于线性功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆