zuluoaaa / blog

blog
6 stars 0 forks source link

关于区间单位变换的一个小小小问题 #9

Open zuluoaaa opened 4 years ago

zuluoaaa commented 4 years ago

由于本人数学菜的抠脚,在日常工作中遇到的一个关于百分比换算的问题。

最开始想的时候觉得挺简单的,打算写成函数调用的时候,居然无法立刻写出来,经过一番思考后方才写了出来。

代码是写出来了,感觉理不顺,随尝试用文字写出来,便于自己更好的理解。

假设存在一个区间范围数(例如5-15),我们想把这个区间数转换成设定好的区间百分比(例如0.4~0.8)。

最大区间值15转换后变成0.8,最小区间值5转换后变成0.4.

思考过程:

把5 ~ 15的区间数想象成一个直线,要把它映射到另外一条直线上并且一一对应。

第一步,先化简,先把5 ~ 15和0.4 ~ 0.8归零处理,即最大值减去最小值,变成0 ~ 10和0 ~ 0.4;经过这么一步的处理,突然就变得简单起来了

要做的就是把0 ~ 10映射到0 ~ 0.4,那还不简单,获取输入数的当前百分比再乘以0.4就搞定了。。。。最后再加上最小值,整个换算就完成了。。。。。 PS:输入的值也需要进行归零处理

const MAX_PERCENT_VALUE = 0.8;
const MIN_PERCENT_VALUE = 0.4;

const  IS_TRANSPARENCE_MIN = 5;
const  IS_TRANSPARENCE_MAX = 15;

function transform(diffVal) {
    return (diffVal - IS_TRANSPARENCE_MIN)/(IS_TRANSPARENCE_MAX-IS_TRANSPARENCE_MIN) * (MAX_PERCENT_VALUE-MIN_PERCENT_VALUE) + MIN_PERCENT_VALUE
}

console.log(transform(5))  // 0.4
console.log(transform(6))  // 0.44
console.log(transform(7))  // 0.48
console.log(transform(15)) // 0.8

最后总结,其实跟随机数取区间范围是一个原理,但是换了个方式出现我就突然转不出来了,尴尬(─.─|||)