Java floor floor(double a, int cutOfDigits)

Here you can find the source of floor(double a, int cutOfDigits)

Description

Modification of Math#floor(double) taking an additional argument representing the requested accuracy in the following way:
double fac = Math.pow(10, digits);
return fac * Math.floor(a / fac);

License

Open Source License

Parameter

Parameter Description
a - a value
cutOfDigits - the number of digits to shift the value before and after flooring

Return

the new value

Declaration

public static double floor(double a, int cutOfDigits) 

Method Source Code

//package com.java2s;
/**/*from  ww w .  j  av a  2s.c om*/
 * 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 {
    /**
     * 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;
    }
}

Related

  1. floor(double a)
  2. floor(double a, double precision)
  3. floor(double a, int n)
  4. floor(double d)
  5. floor(double d)
  6. floor(double d)