Javascript 计算对数刻度中某个值的百分比

Javascript 计算对数刻度中某个值的百分比,javascript,Javascript,我有一个从0到100的对数刻度: 0.00 0.10 1.00 10.00 100.00 我需要做一个有四个四分之一的饼图。 第一个是从0到0.10 第二个是从0.10到1等 如果我的值是25,那么应该计算出它在对数范围内的百分比。考虑到规模,它应该在图表的最后一个季度结束 不幸的是,我对数学的理解还不到这一步;) 你能帮忙告诉我从哪里开始吗。 我想把每个季度都看成是100%的一部分,然后计算出这个季度的情况 每个示例: 32>10,所以应该是在最后一个季度(百分比超过75%)

我有一个从0到100的对数刻度:

  0.00
  0.10
  1.00
 10.00
100.00
我需要做一个有四个四分之一的饼图。 第一个是从0到0.10 第二个是从0.10到1等

如果我的值是25,那么应该计算出它在对数范围内的百分比。考虑到规模,它应该在图表的最后一个季度结束

不幸的是,我对数学的理解还不到这一步;)

你能帮忙告诉我从哪里开始吗。 我想把每个季度都看成是100%的一部分,然后计算出这个季度的情况

每个示例: 32>10,所以应该是在最后一个季度(百分比超过75%)

因此,在这最后一个季度,32人将进入:

((32-10) x 100) / (100 - 10) = 24.44% in this quarter
在四个季度内,24.44/4=6.11%,因此75+6.11=81.11%

现在,这将是可行的,但我正在寻找一种更短更简单的计算方法

你能帮忙吗。

考虑:

       q0        q1        q2        q3
  01234567890123456789012345678901234567890
  |         |         |         |         |
0.01       0.1        1        10        100
                0.32      3.2        32

because log10(32) =    1.505 =  1 + 0.505
because log10(3.2) =   0.505 =  0 + 0.505
because log10(0.32) = -0,495 = -1 + 0.505
                                ^     ^
          quadrant after adding 2     amount to fill
加在一起,填写的金额为%:

功能日志10(f){
返回Math.log(f)/Math.log(10);
}
函数getValue(v){
var l=log10(v),
象限=数学楼层(l)+2,
填充=(l-数学楼层(l))*100;
返回{象限:象限,填充:填充};
}
log('0.32',getValue(0.32));
console.log('3.2',getValue(3.2));

log('32',getValue(32))这肯定是一个关于在对数上绘制值的数学问题 可伸缩性,与JavaScript无关,尤其是 一般编程。无论如何

您需要确定一个最小值,因为零的对数是 未定义。一旦有了最大对数和最小对数,就可以 根据你的意愿调整你的价值观。有点本体论:JavaScript已经
Math.log10
在更先进的引擎中(并且可以随时 如果未定义,则定义为,例如@NinaScholz的答案或使用)

var minval=0.01,
最大值=100,
minlog=Math.log10(minval),
maxlog=Math.log10(maxval),
范围=最大日志-最小日志,
lineartolog=函数(n){
返回(数学日志10(n)-minlog)/范围;
},
对数图=[
0.01,
0.1,
1.
3.2,
10,
32,
75,
100
].map(lineartolog);
document.body.innerHTML=''+logplots+''