Числовой формат Валюты Java

Есть ли способ отформатировать десятичное число как следующее:

100   -> "100"  
100.1 -> "100.10"

Если это - круглое число, опустите десятичную часть. Иначе формат с двумя десятичными разрядами.

80
задан DD. 24 August 2013 в 07:03
поделиться

4 ответа

Сомневаюсь. Проблема в том, что 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
  }
}
46
ответ дан 24 November 2019 в 09:43
поделиться

вы должны сделать что-то вроде этого:

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

4
ответ дан 24 November 2019 в 09:43
поделиться

Я бы рекомендовал использовать пакет 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);
    }
}
149
ответ дан 24 November 2019 в 09:43
поделиться

Да. Вы можете использовать java.util.formatter. Вы можете использовать строку форматирования типа "%10.2f"

6
ответ дан 24 November 2019 в 09:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: