1 /* Open Log Viewer
2 *
3 * Copyright 2011
4 *
5 * This file is part of the OpenLogViewer project.
6 *
7 * OpenLogViewer software is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * OpenLogViewer software is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with any OpenLogViewer software. If not, see http://www.gnu.org/licenses/
19 *
20 * I ask that if you make any changes to this file you fork the code on github.com!
21 *
22 */
23 package org.diyefi.openlogviewer.utils;
24
25 /**
26 * Math is used to provide math functions specific to the project.
27 * @author Ben Fenner
28 */
29 public final class MathUtils {
30
31 private MathUtils() {
32 }
33
34 public static double roundToSignificantFigures(final double input, final int sigFigs) {
35 double absoluteInput = 0;
36 if (input == 0) {
37 return 0;
38 } else if (input < 0) {
39 absoluteInput = -input;
40 } else {
41 absoluteInput = input;
42 }
43
44 final double d = Math.ceil(Math.log10(absoluteInput));
45 final int power = sigFigs - (int) d;
46
47 final double magnitude = Math.pow(10, power);
48 final long shifted = Math.round(input * magnitude);
49
50 return shifted / magnitude;
51 }
52 }