В текстовом представлении моего recycerview у меня есть числа вроде 2557.1564987892, 0.0015468648, 26.2648597816. поэтому я хочу, чтобы если перед точкой было 4 числа, отображались только 2 числа после точки. если перед точкой стоит 1 цифра, отобразите 5 цифр после точки. если перед точкой стоит 2 цифры, отобразите 4 цифры после точки. Таким образом, все они имеют общую длину 6 штук. Спасибо.
Я не буду делать никаких операций со значениями, просто для отображения значений, поступающих из api. Я не могу определить его в своем классе модели ни String, ни float / double для решения.
Вы, кажется, не учитываете возможность чисел с отрицательным знаком. Имейте это в виду, если необходимо.
Все числа больше 0. Но спасибо.
Вы можете попробовать что-то вроде этого:
private static String fmtFixed(float value, int digits) {
StringBuilder pattern = new StringBuilder("0.");
float v = value;
while (v >= 1) {
digits--;
v /= 10;
}
if (value < 1) {
digits--;
}
while (digits > 0) {
digits--;
pattern.append("0");
}
return new DecimalFormat(pattern.toString()).format(value);
}
Для использования вы бы назвали это так:
textView.setText(fmtFixed(2557.1564987892, 6));
Простой способ в строковом формате:
String truncateNumber(String input_num) {
output = input_num.substring(0, 7);
return output;
}
// Function usage
truncated_number = truncateNumber(any_number_as_string);
Метод Substring возвращает подстроку из исходной строки с указанием начальной и конечной позиций.
Это работает, но последняя цифра не округляется, а только обрезается. Это может быть достаточно для пользователя, но округление, вероятно, лучше, но потребует дополнительной работы.
Есть разные способы добиться того же. Способ реализации зависит от того, в каком формате вы будете использовать эти значения? Как струны или как числа с плавающей запятой / удвоением? Возможно оба типа? В обоих значениях типа есть способ реализовать решение.