2011-02-09 85 views

回答

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

這幾乎是我所需要的。一些地區,如瑞士(fr_CH)實際上沒有小於0.05,一切都以0.05爲增量,但getMinimumFractionDigits()仍然會返回2. – Ternary 2011-02-10 15:34:48

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; 
} 
相關問題