@ solusion рекурсивного в (Принятый ответ) составляет 100% прав. Я просто добавляю образец кода для вашей справки.
Моим случаем является отображение цены с двумя десятичными знаками.Это часть внутреннего ответа: "price": 2300, "currencySymbol": "CD", ...
.
Это мой вспомогательный класс:
public class CurrencyUtils
{
private static final String[] suffix = { "", "K", "M" };
public static String getCompactStringForDisplay(final int amount)
{
int suffixIndex;
if (amount >= 1_000_000) {
suffixIndex = 2;
} else if (amount >= 1_000) {
suffixIndex = 1;
} else {
suffixIndex = 0;
}
int quotient;
int remainder;
if (amount >= 1_000_000) {
quotient = amount/1_000_000;
remainder = amount % 1_000_000;
} else if (amount >= 1_000) {
quotient = amount/1_000;
remainder = amount % 1_000;
} else {
return String.valueOf(amount);
}
if (remainder == 0) {
return String.valueOf(quotient) + suffix[suffixIndex];
}
// Keep two most significant digits
if (remainder >= 10_000) {
remainder /= 10_000;
} else if (remainder >= 1_000) {
remainder /= 1_000;
} else if (remainder >= 100) {
remainder /= 10;
}
return String.valueOf(quotient) + '.' + String.valueOf(remainder) + suffix[suffixIndex];
}
}
Это мой тестовый класс (на основе JUnit 4):
public class CurrencyUtilsTest {
@Test
public void getCompactStringForDisplay() throws Exception {
int[] numbers = {0, 5, 999, 1_000, 5_821, 10_500, 101_800, 2_000_000, 7_800_000, 92_150_000, 123_200_000, 9_999_999};
String[] expected = {"0", "5", "999", "1K", "5.82K", "10.50K", "101.80K", "2M", "7.80M", "92.15M", "123.20M", "9.99M"};
for (int i = 0; i < numbers.length; i++) {
int n = numbers[i];
String formatted = CurrencyUtils.getCompactStringForDisplay(n);
System.out.println(n + " => " + formatted);
assertEquals(expected[i], formatted);
}
}
}
в Java это не будет работать, если вы делаете 1,0% 0,1 – endless
@endless: Верно, вам придется сначала преобразовать в целое число. И вам также нужно будет указать, что вы подразумеваете под остальными двумя поплавками, поскольку он обычно определяется в терминах целочисленной арифметики. – recursive
Просто, если кто-то обсудит этот вопрос и задается вопросом, как вы получите не частное, а самое большое натуральное число <= фактор или мода, вы можете использовать эту функцию в математическом пакете: 'Math.floorDiv (x, y)' и 'Math.floorMod (x, y)' –