Liam
729e0b482b
All checks were successful
Deploy to Dokku / docker (ubuntu-latest) (push) Successful in 40s
83 lines
2.6 KiB
Java
83 lines
2.6 KiB
Java
package cc.fascinated.bat.common;
|
|
|
|
import java.text.DecimalFormat;
|
|
import java.util.Locale;
|
|
|
|
/**
|
|
* @author Fascinated (fascinated7)
|
|
*/
|
|
public class NumberFormatter {
|
|
/**
|
|
* The suffixes for the numbers
|
|
*/
|
|
private static final String[] SUFFIXES = new String[] { "K", "M", "B", "T", "Q", "QT", "S", "SP", "O", "N", "D", "UD", "DD", "TD" };
|
|
private static final DecimalFormat FORMAT = new DecimalFormat("###.##");
|
|
|
|
/**
|
|
* Format the provided double
|
|
*
|
|
* @param input the value to format
|
|
* @return the formatted double, in the format of xx.xx[suffix]
|
|
*/
|
|
public static String format(double input) {
|
|
if (Double.isNaN(input)) {
|
|
return "ERROR";
|
|
}
|
|
if (Double.isInfinite(input) || input == Double.MAX_VALUE) {
|
|
return "∞";
|
|
}
|
|
if (1000 > input) {
|
|
return FORMAT.format(input);
|
|
}
|
|
double power = (int) Math.log10(input);
|
|
int index = (int) Math.floor(power / 3) - 1;
|
|
double factor = input / Math.pow(10, 3 + index * 3);
|
|
if (index >= SUFFIXES.length) {
|
|
return "ERROR";
|
|
}
|
|
return FORMAT.format(factor) + SUFFIXES[index];
|
|
}
|
|
|
|
/**
|
|
* Format the provided double with commas
|
|
*
|
|
* @param input the value to format
|
|
* @return the formatted double, in the format of xx,xxx,xxx
|
|
*/
|
|
public static String formatCommas(double input) {
|
|
return String.format("%,.0f", input);
|
|
}
|
|
|
|
/**
|
|
* Turns a provided string into a double, for example 1M -> 1000000.00
|
|
* Accepts decimal and negative values and is not case-sensitive
|
|
*
|
|
* @param input the string to convert
|
|
* @return the value the string represents
|
|
*/
|
|
public static double fromString(String input) {
|
|
if ((input = input.trim()).isEmpty()) {
|
|
return -1D;
|
|
}
|
|
try {
|
|
double value = Double.parseDouble(input); // parse pure numbers
|
|
if (Double.isNaN(value) || Double.isInfinite(value)) {
|
|
return -1;
|
|
}
|
|
return value;
|
|
} catch (NumberFormatException ignored) {
|
|
input = input.toUpperCase(Locale.UK);
|
|
for (int i = SUFFIXES.length - 1; i > 0; i--) {
|
|
String suffix = SUFFIXES[i];
|
|
if (!input.endsWith(suffix)) {
|
|
continue;
|
|
}
|
|
String amount = input.substring(0, input.length() - suffix.length());
|
|
if (!amount.isEmpty()) {
|
|
return Double.parseDouble(amount) * Math.pow(10, 3 + i * 3);
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
} |