制定划分的一般规则

Posted

技术标签:

【中文标题】制定划分的一般规则【英文标题】:Setting a general rule for division 【发布时间】:2014-06-23 09:48:58 【问题描述】:

我有以下功能:

public static void main(String[] args) 
        int interval = 23950; 

        System.out.println (Math.round(weekInterval/1000.00)*1000);



    

函数所做的只是将数字(间隔)四舍五入到最接近的百或千倍数等。

现在数字区间可能会发生变化,可能从数百到数十亿不等,我想给划分一个通用规则:

这样

Math.round(weekInterval/placeholder)*placeholder)

有什么想法吗?

编辑:

到目前为止,这是我利用我有限的知识提出的——请耐心等待这可能是低效的:

public static void main(String[] args) 
        int weekInterval = 2500; 
        StringBuilder sbr = new StringBuilder(); 
        int len = String.valueOf(weekInterval).length();
        String num = "1"; 
        for(int i = 2; i<=len; i++)
            
            sbr.append("0"); 
        
        System.out.println("Number is "+sbr.toString()); 
        System.out.println("Number is "+num+sbr.toString()); 
        
        int placeholder = Integer.valueOf(num+sbr.toString());
        System.out.println((weekInterval + placeholder/2)/placeholder*placeholder); 


    

【问题讨论】:

不是 100% 确定您要完成什么。但是你可以使用类似的东西: int placeholder= Math.pow(10,(String.valueOf(interval).length()-2)); ^^ 我一开始就想出了这个,但是如果它是一个三位数呢? length()-2 部分在这里失败。 您要指定四舍五入的内容吗?数百或数千等?或者程序应该总是四舍五入到数千等? 这是主要问题,我无法预测区间变量的长度。它的范围可以在一百到十亿之间。它应该根据区间变量的长度进行四舍五入。 对于 3 位数字。例如对于 143,我给出的代码将返回 140。到最接近的十位。这是不正确的吗?或者如果是,它应该返回什么 【参考方案1】:

来自http://mindprod.com/jgloss/round.html#MULTIPLE:

// rounding m up to next highest multiple of n
int ceil = ( m + n - 1 ) / n * n;

// rounding m down to multiple of n
int floor = m / n * n;

// rounding m to nearest multiple of n
int near = ( m + n/2 ) / n * n;

这里 m 是要四舍五入的数字,n 是您的“占位符”

【讨论】:

这并没有说明负数以及 m 和 n 的限制是什么。【参考方案2】:

使用 BigDecimal 的更简单的解决方案:

       BigDecimal interval = new BigDecimal("8953315756233454365754734");
       System.out.printf("%.0f\n",interval.round(new MathContext(1, RoundingMode.HALF_UP)));

【讨论】:

为什么不直接使用 BigDecimal,然后使用 setScale() 或 round()?

以上是关于制定划分的一般规则的主要内容,如果未能解决你的问题,请参考以下文章

黑盒测试中多变量的等价类划分规则:弱一般等价类强一般等价类弱健壮等价类强健壮等价类

thinkphp5.0--auth权限

什么叫规则?规则有什么作用?

iOS--正则表达式

abaqus怎么给回转体划分网格

深入理解Unity的碰撞检测机制