1 package org.djunits.value.formatter; 2 3 /** 4 * Formatter of values with width and precision. 5 * <p> 6 * Copyright (c) 2015-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br> 7 * BSD-style license. See <a href="https://djunits.org/docs/license.html">DJUNITS License</a>. 8 * </p> 9 * @version $Revision: 954 $, $LastChangedDate: 2022-01-10 03:42:57 +0100 (Mon, 10 Jan 2022) $, by $Author: averbraeck $, 10 * initial version 11 sep. 2015 <br> 11 * @author <a href="https://www.tudelft.nl/averbraeck">Alexander Verbraeck</a> 12 * @author <a href="https://www.tudelft.nl/staff/p.knoppers/">Peter Knoppers</a> 13 */ 14 public final class Formatter 15 { 16 /** 17 * This class shall never be instantiated. 18 */ 19 private Formatter() 20 { 21 // Prevent instantiation of this class 22 } 23 24 /** Default number of fraction digits. */ 25 public static final int DEFAULTPRECISION = 3; 26 27 /** 28 * Build a format string. 29 * @param width int; the number of characters in the result 30 * @param precision int; the number of fractional digits in the result 31 * @param converter String; the format conversion specifier 32 * @return String; suitable for formatting a float or double 33 */ 34 static String formatString(final int width, final int precision, final String converter) 35 { 36 return String.format("%%%d.%d%s", width, precision, converter); 37 } 38 39 /** 40 * Format a floating point value. 41 * @param value float; the value to format 42 * @param width int; the number of characters in the result 43 * @param precision int; the number of fractional digits in the result 44 * @return String; the formatted floating point value 45 */ 46 public static String format(final float value, final int width, final int precision) 47 { 48 if (0 == value || Math.abs(value) > 0.01 && Math.abs(value) < 9999.0) 49 { 50 return String.format(formatString(width, precision, "f"), value); 51 } 52 return String.format(formatString(width, precision, "e"), value); 53 } 54 55 /** 56 * Format a floating point value. 57 * @param value float; the value to format 58 * @param size int; the number of characters in the result 59 * @return String; the formatted floating point value 60 */ 61 public static String format(final float value, final int size) 62 { 63 return Formatter.format(value, size, Formatter.DEFAULTPRECISION); 64 } 65 66 /** 67 * Format a floating point value. 68 * @param value float; the value to format 69 * @return String; the formatted floating point value 70 */ 71 public static String format(final float value) 72 { 73 return format(value, Format.DEFAULTSIZE, Formatter.DEFAULTPRECISION); 74 } 75 76 /** 77 * Format a floating point value. 78 * @param value double; the value to format 79 * @param width int; the number of characters in the result 80 * @param precision int; the number of fractional digits in the result 81 * @return String; the formatted floating point value 82 */ 83 public static String format(final double value, final int width, final int precision) 84 { 85 if (0 == value || Math.abs(value) > 0.01 && Math.abs(value) < 9999.0) 86 { 87 return String.format(formatString(width, precision, "f"), value); 88 } 89 return String.format(formatString(width, precision, "e"), value); 90 } 91 92 /** 93 * Format a floating point value. 94 * @param value double; the value to format 95 * @param size int; the number of characters in the result 96 * @return String; the formatted floating point value 97 */ 98 public static String format(final double value, final int size) 99 { 100 return format(value, size, Formatter.DEFAULTPRECISION); 101 } 102 103 }