有沒有辦法探索ICU貨幣區域設置的最小面額?例如,美國的是0.01美元,韓國(ko_KR)是1歐元。我認爲在DecimalFormat
object上撥打getRoundingIncrement()
可能會給我,但對於en_US和ko_KR都返回0。ICU貨幣區域設置獲取面值
0
A
回答
1
你需要採取一看:getMinimumFractionDigits()
功能:
#include <unicode/numfmt.h>
#include <unicode/ustream.h>
#include <unicode/ustring.h>
#include <iostream>
int main()
{
UErrorCode e=U_ZERO_ERROR;
icu::NumberFormat *fmt = icu::NumberFormat::createCurrencyInstance(e);
std::cout << fmt->getMinimumFractionDigits() << std::endl;
icu::UnicodeString str;
std::cout << fmt->format(12345.5678,str) << std::endl;
delete fmt;
}
這是程序不同的語言環境的輸出,看來,這是你所需要的
$ ./a.out
2
$12,345.57
$ LC_ALL=en_US.UTF-8 ./a.out
2
$12,345.57
$ LC_ALL=ja_JP.UTF-8 ./a.out
0
¥12,346
$ LC_ALL=ko_KR.UTF-8 ./a.out
0
₩12,346
$ LC_ALL=ru_RU.UTF-8 ./a.out
2
12 345,57 руб.
0
謝謝史蒂夫Loomis和Artyom幫助我拼湊解決方案。
double roundingIncrement = formatter->getRoundingIncrement();
int32_t minFractionDigits = formatter->getMinimumFractionDigits();
double minDenom;
if (roundingIncrement == 0.0 && minFractionDigits == 0.0)
{
minDenom = 1.0;
}
else if (roundingIncrement != 0.0 && minFractionDigits > 0.0)
{
minDenom = roundingIncrement;
}
else
{
minDenom = 0.01;
}
相關問題
- 1. 使用ICU C API顯示區域設置貨幣符號?
- 2. 獲取ICU的當前區域設置
- 3. 獲取貨幣基於區域設置的ISO 4217代碼
- 4. 沒有獲取特定區域設置的貨幣符號
- 5. python區域設置貨幣和負數
- 6. Rails,貨幣區域設置的編號
- 7. 區域設置貨幣符號
- 8. 根據動態貨幣值動態更改區域設置
- 9. ZendFramework 2:區域設置貨幣值的形式
- 10. 如何通過貨幣代碼設置iOS NSNumberFormatter區域設置?
- 11. 從USD到瀏覽器的區域設置貨幣的jQuery格式貨幣?
- 12. cakephp格式貨幣區域
- 13. 如何在JSP中獲取特定區域設置的貨幣符號
- 14. 如何從PHP Intl(ICU庫)獲取默認貨幣
- 15. Magento與2個區域和2種貨幣的多區域設置
- 16. 用戶當前區域設置的貨幣符號
- 17. Zend貨幣歐元與英語區域設置
- 18. Java:貨幣到區域設置映射可能嗎?
- 19. toLocaleString顯示區域設置貨幣在IE上不起作用
- 20. 如何在Java中爲區域設置貨幣格式
- 21. web.config需要設置爲南非的區域和貨幣
- 22. 區域設置的有效貨幣格式
- 23. 如何根據LUA中的區域設置貨幣格式
- 24. 將貨幣格式化爲區域設置特定格式
- 25. 更改貨幣格式的默認區域設置行爲
- 26. 添加AngularJS貨幣區域設置到最後
- 27. 如何按照區域設置隱藏貨幣ID
- 28. devexpress樞軸字段的貨幣區域設置
- 29. Angular JS,時區,貨幣和區域
- 30. 根據貨幣代碼將貨幣格式設置爲貨幣
這幾乎是我所需要的。一些地區,如瑞士(fr_CH)實際上沒有小於0.05,一切都以0.05爲增量,但getMinimumFractionDigits()仍然會返回2. – Ternary 2011-02-10 15:34:48