产生结果的分数为百或千等的倍数

时间:2014-06-23 08:01:44

标签: java integer-division

我的程序中有一个变量集:

int weekInterval = 100; 

我有以下功能:

public void weeksToNotify(int weeks, String date){
        Date dt = Convert(date); 
        Calendar cal = Calendar.getInstance(); 
        cal.setTime(dt); 
        weekSpecial = weekInterval*(1+(weeks/weekInterval)); 
        cal.add(Calendar.DATE, (weekSpecial*7));
        dateWeekReg = cal.getTime();
    }

此功能的参数是:

int weeks: The current age in weeks for the person/event/thing.

String date: The date of birth of the person/event/thing.

现在执行此函数时,变量weekSpecial具有所需的值,但我想将此值四舍五入。因此,例如,如果weekSpecial变量的值为150,我想要200作为结果,如果它的值为23400我只想要23000等。我不是在寻找一个精确的答案,我想学习如何解决这个问题。所以指针或暗示/ Algo将为我做。谢谢:)

4 个答案:

答案 0 :(得分:3)

从你看来你正在寻找一种算法,开始四舍五入到左边的第二个字符。

因为你不想要一个答案我会暗示如果你将weekSpecial的值除以10(用一个计数器)直到该值小于100然后除以100并使用Round函数,最后乘以10 ^(2 +计数器),你应该可以得到你正在寻找的四舍五入的数字。

祝你好运!

答案 1 :(得分:2)

对于第一个值(150),您可以尝试设置

weekSpecial = weekSpecial/100 * 100

计算weekSpecial参数后。

Java中的整数除法会丢弃小数部分,因此首先除以然后再乘以100可以得到你所问的内容。

当然,计算可以集成在一个语句中,例如

weekSpecial = (weekInterval*(1+(weeks/weekInterval)) / 100) * 100;

如果您需要的舍入为2位数(例如,从150100),则此方法有效,否则您需要除以10 ^ n,其中n是您需要四舍五入的位数(在150的情况下,n = 2)。

因此,对于23500,乘法应为23500/1000 * 1000

一般来说,假设您知道n,答案是

double factor = Math.pow(10, n);
weekSpecial = (int)(Math.round(weekSpecial/factor * factor));

答案 2 :(得分:2)

可能的算法可以是这样的: -

检查WeekSpecial变量的长度(首先转换为String然后应用int length()方法)。

请参阅,如果WeekSpecial Variable在100'范围内,则执行weekSpecial = weekSpecial/100 * 100

如果WeekSpecial Variable在1000'范围内,则执行weekSpecial = weekSpecial/1000 * 1000

类似地,如果WeekSpecial Variable在10 ^ n的范围内,--->然后做weekSpecial=(weekSpecial/10^n)*10^n

此外,如果您将值四舍五入到最接近的幂10 ^ n,请执行以下操作: -

  

说,160 - > 200 ------(1.0×160/100)= 1.6.Apply,Math.round(1.6)= 2。和   四舍五入后,乘以10 ^ n,即100,这里你得到200.I   希望我很清楚!

可能这可以通过四舍五入来帮助你!

答案 3 :(得分:2)

你可以使用Math.round。这会将您的数字四舍五入到最接近的值,高于或低于整数。以下示例舍入到最接近的100。

int weekInterval;

System.out.println (Math.round(weekInterval/100.00)*100);

如果要舍入到最接近的1000,只需除以/乘以1000。