Есть ли способ отформатировать десятичное число как следующее:
100 -> "100"
100.1 -> "100.10"
Если это - круглое число, опустите десятичную часть. Иначе формат с двумя десятичными разрядами.
Сомневаюсь. Проблема в том, что 100 никогда не бывает 100, если это поплавок, обычно это 99.9999999999 или 100.0000001 или что-то в этом роде.
Если вы хотите форматировать его таким образом, вам нужно определить эпсилон, то есть максимальное расстояние от целого числа, и использовать целочисленное форматирование, если разница меньше, и плавающее в противном случае.
Что-то вроде этого:
public String formatDecimal(float number) {
float epsilon = 0.004f; // 4 tenths of a cent
if (Math.abs(Math.round(number) - number) < epsilon) {
return String.format("%10.0f", number); // sdb
} else {
return String.format("%10.2f", number); // dj_segfault
}
}
вы должны сделать что-то вроде этого:
public static void main(String[] args) {
double d1 = 100d;
double d2 = 100.1d;
print(d1);
print(d2);
}
private static void print(double d) {
String s = null;
if (Math.round(d) != d) {
s = String.format("%.2f", d);
} else {
s = String.format("%.0f", d);
}
System.out.println(s);
}
выводит:
100
100,10
Я бы рекомендовал использовать пакет java.text:
double money = 100.1;
NumberFormat formatter = NumberFormat.getCurrencyInstance();
String moneyString = formatter.format(money);
System.out.println(moneyString);
У этого есть дополнительное преимущество, заключающееся в том, что он зависит от локали.
Но, если необходимо, обрежьте строку, которую вы получите, если это будет целый доллар:
if (moneyString.endsWith(".00")) {
int centsIndex = moneyString.lastIndexOf(".00");
if (centsIndex != -1) {
moneyString = moneyString.substring(1, centsIndex);
}
}
Да. Вы можете использовать java.util.formatter. Вы можете использовать строку форматирования типа "%10.2f"