Java floor floor2(int a, int preserveDigits)

Here you can find the source of floor2(int a, int preserveDigits)

Description

Math#floor(double) -like operation for integers preserving the given number of digits in contrary to MathUtil#floor(int,int) where cut-of-digits are specified:
return floor(a, getDigits(a) - preserveDigits)

License

Open Source License

Parameter

Parameter Description
a - a value
preserveDigits - the number of digits to preserve

Return

the new value

Declaration

public static int floor2(int a, int preserveDigits) 

Method Source Code

//package com.java2s;
/**//from   ww  w .jav  a  2 s . c o  m
 * Syncnapsis Framework - Copyright (c) 2012-2014 ultimate
 * 
 * This program is free software; you can redistribute it and/or modify it under the terms of
 * the GNU General Public License as published by the Free Software Foundation; either version
 * 3 of the License, or any later version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MECHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Plublic License along with this program;
 * if not, see <http://www.gnu.org/licenses/>.
 */

public class Main {
    /**
     * {@link Math#floor(double)}-like operation for integers preserving the given number of digits
     * in contrary to {@link MathUtil#floor(int, int)} where cut-of-digits are specified:<br>
     * <code>return floor(a, getDigits(a) - preserveDigits)</code>
     * 
     * @param a - a value
     * @param preserveDigits - the number of digits to preserve
     * @return the new value
     */
    public static int floor2(int a, int preserveDigits) {
        return floor(a, getDigits(a) - preserveDigits);
    }

    /**
     * Modification of {@link Math#floor(double)} taking an additional argument representing the
     * requested accuracy in the following way:<br>
     * <code>double fac = Math.pow(10, digits);<br>
     * return fac * Math.floor(a / fac);</code>
     * 
     * @param a - a value
     * @param cutOfDigits - the number of digits to shift the value before and after flooring
     * @return the new value
     */
    public static double floor(double a, int cutOfDigits) {
        double fac = Math.pow(10, cutOfDigits);
        return fac * Math.floor(a / fac);
    }

    /**
     * {@link Math#floor(double)}-like operation for integers, e.g.:
     * <ul>
     * <li>1234, 3 --> 1000</li>
     * <li>1234, 2 --> 1200</li>
     * <li>1234, 1 --> 1230</li>
     * </ul>
     * Some "unusual" cases:
     * <ul>
     * <li>1234, 5 --> 0</li>
     * <li>1234, 4 --> 0</li>
     * <li>1234, 0 --> 1234</li>
     * <li>1234, -1 --> 1234</li>
     * </ul>
     * 
     * @param a - a value
     * @param cutOfDigits - the number of digits to "cut of"
     * @return the new value
     */
    public static int floor(int a, int cutOfDigits) {
        if (cutOfDigits <= 0)
            return a;
        int fac = 1;
        while (--cutOfDigits >= 0)
            fac *= 10;
        int ret = (a / fac) * fac;
        return ret;
    }

    /**
     * Get the number of digits for the given value
     * 
     * @param a - a value
     * @return the number of digits
     */
    public static int getDigits(int a) {
        int digits = 0;
        while (a != 0) {
            digits++;
            a /= 10;
        }
        return digits;
    }
}

Related

  1. floor(Integer a)
  2. Floor(Object in, int val)
  3. floor(String input)
  4. floor10(double a)
  5. floor1e5(double coordinate)
  6. floor_double(double a)
  7. floor_double(double value)
  8. floor_double_long(double d)
  9. floor_float(float f)