如何在java中舍入整数

时间:2011-04-25 06:31:25

标签: java

我想将数字1732舍入到最近的十,十万。我尝试使用Math round函数,但它只针对float和double编写。如何为整数做这个? java中有没有函数?

13 个答案:

答案 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&lt; 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;
}