【问题标题】:ICU Custom Currency Formatting (C++)ICU 自定义货币格式 (C++)
【发布时间】:2009-12-21 18:36:11
【问题描述】:

是否可以使用 ICU 库自定义格式货币字符串,类似于通过提供格式字符串(例如“mm/dd/yyy”)来格式化时间字符串的方式。

因此,对于给定的语言环境(例如美元),如果我愿意,我可以让所有货币字符串返回“xxx.00 $ USD”。

【问题讨论】:

    标签: c++ currency icu


    【解决方案1】:

    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.htmlcreateCurrencyInstance 成员和then 使用setMaximumIngegerDigits 或其他函数来制作您需要的东西——这将更加本地化。尽量不要假设任何文化。因为“10,000 美元”在某些国家/地区被误解为“10 美元”,其中“,”用于小数部分的分离。

    所以要小心。

    【讨论】:

      【解决方案2】:

      您可以创建一个货币实例,然后在安全的情况下将其转换为DecimalFormat

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

      ...然后你可以调用 applyPattern 。请参阅“特殊模式字符”下有关 ¤、¤¤、¤¤¤ 的信息

      【讨论】:

        【解决方案3】:

        使用 ICU 图书馆的createCurrencyInstance()

        【讨论】:

        • 我相信只返回嵌入在该语言环境中的给定语言环境的货币格式。所以对于美元,它会返回类似“$100.00 USD”的东西。我正在寻找一种方法来自定义我想要的格式。因此,如果我想要“[value][symbol] [currency name]”,即使该语言环境通常不是这样显示的,我也可以得到它。
        猜你喜欢
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多