我的程序中有一个变量集:
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将为我做。谢谢:)
答案 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位数(例如,从150
到100
),则此方法有效,否则您需要除以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。