package net.iponweb.disthene.reader.graphite.utils; import com.google.common.math.DoubleMath; import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.NumberFormat; import java.util.Locale; /** * @author Andrei Ivanov */ public class HumanValueFormatter extends ValueFormatter { private DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US); public HumanValueFormatter() { DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols(); symbols.setGroupingSeparator(','); formatter.setDecimalFormatSymbols(symbols); } @Override protected String formatDoubleSpecialSmart(Double value) { BigDecimal bigDecimal = BigDecimal.valueOf(value); // do not do this for math integers if (!DoubleMath.isMathematicalInteger(value)) { // precision is just like in graphite (scale check redundant but let it be) if (bigDecimal.precision() > 12 && bigDecimal.scale() > 0) { int roundTo = bigDecimal.scale() - bigDecimal.precision() + 12 > 0 ? bigDecimal.scale() - bigDecimal.precision() + 12 : 0; bigDecimal = bigDecimal.setScale(roundTo, BigDecimal.ROUND_HALF_UP); } } return formatter.format(bigDecimal.doubleValue()); } }