一则细分等级引出的思考

作者:vkvi 来源:ITPOW(原创) 日期:2021-6-20

现状是这样的:

等级低值(包含)高值(不含)
1V1
2V2V1
3V3V2
4V4V3
5V5V4
6V6V5
7V7V6
8V8V7
9V9V8
10
V9

也就是说:

  • 值 >=V1 为 1 等

  • 值 >=V2 且 <V1 为 2 等

  • ……

  • 值 >=V9 且 < V8 为 9 等

  • 值 <V9 为 10 等

已知:V1、V2、V3……V9 之间的差是相等的。

现在的需求是:想将等级细分一下,最小等级为 0.1,采用均分法。

先问:总共会分出多少个等级为?

  • 101 个?

  • 100 个?

  • 99 个?

  • 91 个?

  • 90 个?

  • 82 个?

答案是 82 个,为什么呢?

由于 1 和 10 只有一边有边界,所以是分不出等级的,这样等级就是:

  • 1.0

  • 2.0、2.1、2.2、2.3……

  • 3.0、3.1、3.2、3.3……

  • ……

  • 9.0、9.1、9.2、9.3……

  • 10.0

所以并不存在 1.1、1.2、1.3……1.9 这 9 个等级。

给一个值,如何获取其所处的等级呢?

if (值 >= V1)
{
    return 1.0;
}
else if (值 < V9)
{
    return 10.0;
}
else
{
    return 9.9 - Math.Floor((值 - V9) / 每0.1等级的差值) * 0.1;
}

注意 else 中的内容:

  • 我们是以 9.9 为基准等级。

  • 然后算出与 V9 的差值(重要:由表格,我们已经看出:值越高,等级数值越小)

  • 然后再看看这个差值相当于多少个“每0.1等级的差值”。

  • 再取 Floor,注意是取 Floor,不是取 Ceiling。

  • 最后折算成 0.1 等级。

  • 最后得出等级。

以上是以 9.9、V9 作为基准的,为什么不反过来呢?反过来思维有点奇特:

  • 因为 2.0 这个等级对应的基准边界值是无限接近 V1,但是它不能等于 V1。

  • 不像 9.9 这个等级对应的基准边界值就是 V9(前面已经说了:值越高,等级数值越小,所以反过来:9.9 对应的 V9 是最小的)。

所以没使用反过来的方法。


相关文章