forked from Fascinated/Bat
update number formatter
This commit is contained in:
83
src/main/java/cc/fascinated/bat/common/NumberFormatter.java
Normal file
83
src/main/java/cc/fascinated/bat/common/NumberFormatter.java
Normal file
@ -0,0 +1,83 @@
|
||||
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;
|
||||
}
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
package cc.fascinated.bat.common;
|
||||
|
||||
import lombok.experimental.UtilityClass;
|
||||
|
||||
import java.text.NumberFormat;
|
||||
|
||||
/**
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@UtilityClass
|
||||
public class NumberUtils {
|
||||
/**
|
||||
* Formats a number with commas.
|
||||
* <p>
|
||||
* Example: 1000 -> 1,000 | Example: 1000.5 -> 1,000.5
|
||||
* </p>
|
||||
*
|
||||
* @param number the number to format
|
||||
* @return the formatted number
|
||||
*/
|
||||
public static String formatNumberCommas(double number) {
|
||||
NumberFormat format = NumberFormat.getNumberInstance();
|
||||
format.setGroupingUsed(true);
|
||||
format.setMaximumFractionDigits(2);
|
||||
return format.format(number);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user