2012-05-31 4 views
11

Существует несколько существующего код формы наблюдения, которая используется для форматирования числовых значений:Java string.Format с символом валюты

String.format(pattern, value) 

Обратите внимание, что я не могу изменить сам код - я могу только измените шаблон формата, поставленный в код.

Каков шаблон формата для вывода символа валюты для языкового стандарта по умолчанию? По существу, я хочу достичь следующий вывод:

String.format("...", 123) => $ 123 
+0

Может быть, стоит посмотреть на [NumberFormat] (http://docs.oracle.com/javase/6/docs/api/java/text/NumberFormat.html#format (длинный)). –

+0

отредактировано, чтобы упомянуть, я не могу изменить код –

+0

@MarcPolizzi: вы не можете изменить код, но вы * можете * изменить строку формата (предположительно указанную в другом месте) - это правильно? –

ответ

4

С ограничениями, которые вы указали, я думаю, что этого достичь невозможно. Чтобы перейти к текущему символу валюты Locale, вам понадобится минимум кода.

Если у вас нет абсолютно никаких средств, чтобы добавить код в программу, лучше всего использовать установленный символ для «currency» (¤). Это было установлено для этой конкретной цели, чтобы символизировать валюту, отсутствующую более конкретным символом.

Если вы не можете изменить данный код, но добавить код в проект в целом, вы можете использовать его, чтобы найти наиболее подходящий символ. После этого вы можете использовать его для создания шаблона для существующего кода для форматирования.

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

4

Вы можете попробовать следующее:

public static void main(String[] args) { 
    System.out.println(String.format(" %d \u20AC", 123)); // %d for integer 
    System.out.println(String.format(" %.2f \u20AC", 123.10)); // %f for floats 
} 

Печатается:

123 € 
123.10 € 
-2
String formatstring=String.format("$%s", 123); 
    System.out.println(formatstring); 
+0

Кажется, что не печатается символ ЕВРО, если местный мой JVM является французским; все еще отображают $ –

+0

ohhh извините. Я думал, вы хотите напечатать $. –

11

Нет необходимости изобретать колесо. DecimalFormat поставляется с поддержкой валюты:

String output = DecimalFormat.getCurrencyInstance().format(123.45); 

Это также поставляется с полной поддержкой локали необязательным переходящая в Locale:

String output = DecimalFormat.getCurrencyInstance(Locale.GERMANY).format(123.45); 

Вот тест:

System.out.println(DecimalFormat.getCurrencyInstance().format(123.45)); 
System.out.println(DecimalFormat.getCurrencyInstance(Locale.GERMANY).format(123.45)) ; 

Выход:

$123.45 
123,45 € 
1

Если доступный по умолчанию Locale недоступен, мы можем пойти с настройкой символа валюты, используя уникод и десятичное форматирование. Как и в приведенном ниже кодексе:

. Установка символа индийской валюты и форматирование значения. Это будет работать без внесения пользователем изменений в настройки.

Locale locale = new Locale("en","IN"); 
DecimalFormat decimalFormat = (DecimalFormat) DecimalFormat.getCurrencyInstance(locale); 
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(locale); 
dfs.setCurrencySymbol("\u20B9"); 
decimalFormat.setDecimalFormatSymbols(dfs); 
System.out.println(decimalFormat.format(12324.13)); 

Выход:

₹12,324.13 
Смежные вопросы