sascha@655: package de.intevation.flys.utils;
sascha@655: 
sascha@655: public class DoubleUtil
sascha@655: {
sascha@655:     public static final double DEFAULT_STEP_PRECISION = 1e6;
sascha@655: 
sascha@655:     private DoubleUtil() {
sascha@655:     }
sascha@655: 
sascha@655:     public static final double [] explode(double from, double to, double step) {
sascha@655:         return explode(from, to, step, DEFAULT_STEP_PRECISION);
sascha@655:     }
sascha@655: 
sascha@655:     public static final double round(double x, double precision) {
sascha@655:         return Math.round(x * precision)/precision;
sascha@655:     }
sascha@655: 
sascha@655:     public static final double round(double x) {
sascha@655:         return Math.round(x * DEFAULT_STEP_PRECISION)/DEFAULT_STEP_PRECISION;
sascha@655:     }
sascha@655: 
sascha@655:     public static final double [] explode(
sascha@655:         double from,
sascha@655:         double to,
sascha@655:         double step,
sascha@655:         double precision
sascha@655:     ) {
sascha@655:         double lower = from;
sascha@655: 
sascha@655:         double diff = to - from;
sascha@655:         double tmp  = diff / step;
sascha@655:         int    num = (int)Math.abs(Math.ceil(tmp)) + 1;
sascha@655: 
sascha@655:         double [] values = new double[num];
sascha@655: 
sascha@655:         if (from > to) {
sascha@655:             step = -step;
sascha@655:         }
sascha@655: 
sascha@655:         for (int idx = 0; idx < num; idx++) {
sascha@655:             values[idx] = round(lower, precision);
sascha@655:             lower      += step;
sascha@655:         }
sascha@655: 
sascha@655:         return values;
sascha@655:     }
sascha@655: }
sascha@655: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :