将数字拆分为相等的周期值

时间:2018-04-05 14:25:37

标签: java

我已获得最低和最高人数,

例如:min = 10和max = 1000现在我想将这个数字分成相等的部分,结果我应该得到10个数字。

类似:100,200,300,400,500,600,700,800,900,1000

这可以通过将max与我们想要的数字分开来实现,例如:1000/10并且每次都加100。

但是,有一种情况我们得到了: min = 14和max = 1113在这种情况下,如果我们除1113/10然后我们将得到111

,范围将为0,113,226,339 ...

但是,我不想像这样展示他们。如果我可以显示110或115或120偶数(舍入)而不是113,那会更好。

任何人都可以帮助我。

2 个答案:

答案 0 :(得分:0)

在您的示例中,min=14max=1113分割1113/10得到111.如果要将111回合到110,可以执行111 - (111 % 10)得到110。然后简单地迭代10次并将起始数乘以当前迭代。

此处有类似的帖子:How to round *down* integers in Java?

根据您要显示的数字(110或115或120),您可以采用类似的方式进行此操作。

答案 1 :(得分:0)

这是用于缩放图表的算法;在轴上分配刻度线。 然而,10个滴答是高估。

private int[] ticks(int min, int max) {
    int gap = (max - min) / 10;
    // Round gap up to a nice value - best calculatory:
    if (gap < 1) {
        gap = 1;
    } else if (gap < 5) {
        gap = 5;
    } else if (gap < 10) {
        gap = 10;
    } else if (gap < 50) {
        gap = 50;
    } else if (gap < 100) {
        gap = 100;
    } else if (gap < 250) {
        gap = 250;
    ...
    }
    int minTick = (min/gap) * gap;
    if (minTick > min) { // For negative numbers.
        minTick -= gap;
    }
    int maxTick = (max/gap) * gap;
    if (maxTick > min) { // Negative, and ceiling.
        maxTick += gap;
    }
    int ngap = (maxTick - minTick) / gap;
    int[] ticks = new int[ngaps + 1];
    for (int i = 0; i <= ngaps; ++i) {
        ticks[i] = minTick + i * gap;
    }
    return ticks;
}