1 package org.djutils.stats.summarizers;
2
3 import java.io.Serializable;
4
5 /**
6 * The Statistic interface defines the methods to implement for each of the statistics classes.
7 * <p>
8 * Copyright (c) 2023-2023 Delft University of Technology, Jaffalaan 5, 2628 BX Delft, the Netherlands. All rights reserved. See
9 * for project information <a href="https://simulation.tudelft.nl/" target="_blank"> https://simulation.tudelft.nl</a>. The DSOL
10 * project is distributed under a three-clause BSD-style license, which can be found at
11 * <a href="https://simulation.tudelft.nl/dsol/3.0/license.html" target="_blank">
12 * https://simulation.tudelft.nl/dsol/3.0/license.html</a>. <br>
13 * @author <a href="https://www.tudelft.nl/averbraeck" target="_blank"> Alexander Verbraeck</a>
14 */
15 public interface Statistic extends Serializable
16 {
17 /**
18 * Initialize the statistic.
19 */
20 void initialize();
21
22 /**
23 * Returns the description of the statistic.
24 * @return String; the description of the statistic
25 */
26 String getDescription();
27
28 /**
29 * Return the current number of observations.
30 * @return long; the number of observations
31 */
32 long getN();
33
34 /**
35 * Return a string representing a line with important statistics values for this statistic, for a textual table with a
36 * monospaced font that can contain multiple statistics.
37 * @return String; line with most important values of the statistic
38 */
39 String reportLine();
40
41 /**
42 * Return a formatted string with 2 digits precision for a floating point value that fits the number of characters. The
43 * formatter will fall back to scientific notation when the value does not fit with floating point notation.
44 * @param value double; the value to format
45 * @param numberCharacters int; the number of characters for the result
46 * @return String; a string representation with the given number of characters
47 */
48 default String formatFixed(final double value, final int numberCharacters)
49 {
50 if (Double.isNaN(value) || Double.isInfinite(value) || value == 0.0 || Math.abs(value) >= 0.01)
51 {
52 String formatted = String.format("%" + numberCharacters + ".3f", value);
53 if (formatted.length() == numberCharacters)
54 {
55 return formatted;
56 }
57 }
58 return String.format("%" + numberCharacters + ".3e", value);
59 }
60 }