/******************************************************************************* * Copyright 2006 - 2012 Vienna University of Technology, * Department of Software Technology and Interactive Systems, IFS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * This work originates from the Planets project, co-funded by the European Union under the Sixth Framework Programme. ******************************************************************************/ package eu.scape_project.planning.model.util; import java.io.Serializable; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.Locale; public class FloatFormatter implements Serializable{ private static final long serialVersionUID = 8876630779501817308L; private DecimalFormat dfPrec = new DecimalFormat("##############0.0##############", new DecimalFormatSymbols(Locale.US)); private DecimalFormat df=new DecimalFormat(" ########.##;-########.##"); private DecimalFormat dfScientific = new DecimalFormat(" 0.########E00;-0.########E00"); /** * formats a float value in decimal notation (non scientific) * if value is NaN or infinite, Double.toString is used * * @param value * @return */ public String formatFloatPrecisly(double value){ if (Double.isInfinite(value) || Double.isNaN(value)) { return Double.toString(value); } if (Math.abs(value) > 1000000000000000.0) { // ok, this is too much, return dfScientific.format(value); } return dfPrec.format(value); } /** * formats a floating point number * if the number has a power > 10, scientific notation is used * * @param value * @return */ public String formatFloat(double value) { double absValue = Math.abs(value); if ((absValue >= 10000000000.) || (absValue < 0.01)) { return dfScientific.format(value); } else { return df.format(value); } } }