我想将数字1732舍入到最近的十,十万。我尝试使用Math round函数,但它只针对float和double编写。如何为整数做这个? java中有没有函数?
答案 0 :(得分:24)
您想要使用哪种舍入机制?对于正数,这是一种原始方法:
int roundedNumber = (number + 500) / 1000 * 1000;
这会带来1499到1000和1500到2000之类的东西。
如果你有负数:
int offset = (number >= 0) ? 500 : -500;
int roundedNumber = (number + offset) / 1000 * 1000;
答案 1 :(得分:14)
(int)(Math.round( 1732 / 10.0) * 10)
Math.round(double)
取double
,然后向上舍入为最接近的整数。因此,1732
将在173.2
处理时成为Math.round(1732 / 10.0)
(输入参数)。因此,该方法将其舍入为173.0
。然后将其与 10 (Math.round( 1732 / 10.0) * 10)
相乘,得到向下舍入的答案,然后将173.0
转换为int
。
答案 2 :(得分:13)
使用Precision(Apache Commons Math 3.1.1)
Precision.round(double, scale); // return double
Precision.round(float, scale); // return float
使用MathUtils(Apache Commons Math) - 旧版本
MathUtils.round(double, scale); // return double
MathUtils.round(float, scale); // return float
scale - 小数点右边的位数。 (+/-)
放弃,因为方法圆(浮动, 比例)可以使用。
Math.round(MathUtils.round(1732,-1)); //最近十,1730
Math.round(MathUtils.round(1732,-2)); //最接近百,1700
Math.round(MathUtils.round(1732,-3)); //最接近千,2000
int i = 1732;
MathUtils.round((double) i, -1); // nearest ten, 1730.0
MathUtils.round((double) i, -2); // nearest hundred, 1700.0
MathUtils.round((double) i, -3); // nearest thousand, 2000.0
答案 3 :(得分:6)
你可以尝试:
int y = 1732;
int x = y - y % 10;
结果将是1730年。
修改:此未回答问题。它只是删除了部分数字,但没有“舍入到最近的”。
答案 4 :(得分:4)
近十点:
int i = 1986;
int result;
result = i%10 > 5 ? ((i/10)*10)+10 : (i/10)*10;
(随意加零,数十万)。
答案 5 :(得分:2)
为什么不检查单位数字... 1.如果小于或等于5,则在单位位置加0并保留数字。 2.如果大于5,则增加十位数,在单位位置加0。
例如:1736(因为6> = 5),舍入数字将是1740。 现在为1432(因为2< 5),舍入的数字将是1430 ....我希望这会奏效......如果不是让我知道这些案件......
快乐编程,
答案 6 :(得分:1)
int y = 173256457;int x = (y/10)*10;
现在你可以用100,1000替换10等等......
答案 7 :(得分:1)
很容易..
int x = 1234; int y = x - x%10; //它将给出1230
int y = x - x%100; //它会给出1200
int y = x - x%1000; //它会给出1000
上面的逻辑只会将最后的数字转换为0.如果你想要实际的// 例如。 1278这应该四舍五入到1280,因为最后一个数字8> 5为此我写了一个函数检查出来。
private double returnAfterRoundDigitNum(double paramNumber, int noOfDigit)
{
double tempSubtractNum = paramNumber%(10*noOfDigit);
double tempResultNum = (paramNumber - tempSubtractNum);
if(tempSubtractNum >= (5*noOfDigit))
{
tempResultNum = tempResultNum + (10*noOfDigit);
}
return tempResultNum;
}
这里传递2个参数,一个是数字,另一个是你需要四舍五入的位置。
此致 阿比纳夫
答案 8 :(得分:1)
int val2 = 1732;
val2 = (int)(Math.rint((double) i / 10) * 10);
输出为:1730
答案 9 :(得分:0)
你看过Mathutils.round()的实现吗?它全部基于BigDecimal和字符串转换。很难想象许多效率较低的方法。
答案 10 :(得分:0)
不使用任何数学工具,可以对任何单位进行舍入,如下所示:
double roundValue (double input, double toNearest){
//toNearest is any rounding base like 10, 100 or 1000.
double modValue = input % toNearest;
System.out.println(modValue);
if(modValue == 0d){
roundedValue = input;
}
else
{
roundedValue = ((input - modValue) + toNearest);
}
System.out.println(roundedValue);
return roundedValue;
}
答案 11 :(得分:0)
我通常这样做:
class A
{
public:
A() {}
~A() {}
void do_something();
class B
{
public:
B() {}
~B() {}
void do_something_other();
};
};
结果将为您提供1740。
希望这会有所帮助。
答案 12 :(得分:-1)
我已经制作了这个简单的方法,它对我来说很好。它会四舍五入到最接近的十,但很少调整你可以围绕100,1000等。
public int round10(int num){
if (num%10 < 5){
while (num%10!=0){
num--;
}
}
else {
while (num%10!=0){
num++;
}
}
return num;
}