Форматирование пользовательских валют ICU (C ++) - PullRequest
1 голос
/ 21 декабря 2009

Возможно ли пользовательское форматирование строк валюты с использованием библиотеки ICU, аналогично тому, как это позволяет форматировать строки времени путем предоставления строки форматирования (например, "mm / dd / yyy").

Так что для данной локали (скажем, в долларах США), если бы я хотел, я мог бы вернуть все строки валют "xxx.00 $ USD".

Ответы [ 3 ]

1 голос
/ 28 декабря 2009

См. http://icu -project.org / apiref / icu4c / classDecimalFormat.html ,

В частности: http://icu -project.org / apiref / icu4c / classDecimalFormat.html # aadc21eab2ef6252f25eada5440e3c65

Синтаксис шаблона см .: http://icu -project.org / apiref / icu4c / classDecimalFormat.html # _details

Я не использовал это, но, насколько мне известно об ICU, это направление.

Однако Я бы предложил использовать:

http://icu -project.org / apiref / icu4c / classNumberFormat.html и createCurrencyInstance member и затем используют setMaximumIngegerDigits или другие функции для создания что вам нужно - это было бы гораздо более локализованным. Старайтесь не предполагать ничего о какой-либо культуре. Потому что «10 000 долларов США» могут быть неверно истолкованы как «10 долларов США» в некоторых странах, где «,» используется для разделения фракций.

Так что будьте осторожны.

1 голос
/ 02 июля 2010

Вы можете создать экземпляр валюты, затем, если это безопасно, привести его к DecimalFormat

if (((const NumberFormat*)fmt)->getDynamicClassID() == DecimalFormat::getStaticClassID()) 
  {   const DecimalFormat* df = (const DecimalFormat*) fmt; ...

… тогда вы можете вызвать applyPattern для него. См. Информацию о ¤, ¤¤, ¤¤¤ в разделе «символы специального шаблона»

0 голосов
/ 21 декабря 2009

Использование библиотеки ICU createCurrencyInstance () .

...