Преобразовать классный формат до двух десятичных знаков - PullRequest
0 голосов
/ 01 июня 2018

Я использую метод ниже, чтобы преобразовать число в форматированном виде, как

 private static String coolFormat(double n, int iteration) {
    double d = ((long) n / 100) / 10.0;
    boolean isRound = (d * 10) %10 == 0;//true if the decimal part is equal to 0 (then it's trimmed anyway)
    return (d < 1000? //this determines the class, i.e. 'k', 'm' etc
            ((d > 99.9 || isRound || (!isRound && d > 9.99)? //this decides whether to trim the decimals
                    (int) d * 10 / 10 : d + "" // (int) d * 10 / 10 drops the decimal
            ) + "" + c[iteration])
            : coolFormat(d, iteration+1));

}

Как это может быть результат для двух десятичных знаков.

Log.e("PrintValue ", coolFormat(1520,0)+"");

06-01 15:57:07.625 19542-19542/? E/PrintValue: 1.5k

Если я введу 1520 ВЫХОД => 1,5 КБ, но на выходе должно быть 1,52 К

1 Ответ

0 голосов
/ 01 июня 2018

Попробуйте следующий метод, он должен работать для вас

public static String formatNumberExample(Number number) {
    char[] suffix = {' ', 'k', 'M', 'B', 'T', 'P', 'E'};
    long numValue = number.longValue();
    int value = (int) Math.floor(Math.log10(numValue));
    int base = value / 3;
    if (value >= 3 && base < suffix.length) {
        return new DecimalFormat("#0.00").format(numValue / Math.pow(10, base * 3)) + suffix[base];
    } else {
        return new DecimalFormat("#,##0").format(numValue);
    }
}

Доказательство:

image_proof

...