/* * Set a currency on a NumberFormat with ICU 2.6 APIs. * * @param nf The NumberFormat on which to set the currency; takes effect on * currency-formatting NumberFormat instances. * The display style of the output is controlled by nf (its pattern, * usually from the display locale ID used to create this instance) * while the currency symbol and number of decimals are set for * the currency. * @param currency The 3-letter ISO 4217 currency code, NUL-terminated. * @param errorCode ICU error code, must pass U_SUCCESS() on input. */ static void setNumberFormatCurrency_2_6(NumberFormat &nf, const char *currency, UErrorCode &errorCode) { if(U_FAILURE(errorCode)) { return; } if(currency==NULL || strlen(currency)!=3) { errorCode=U_ILLEGAL_ARGUMENT_ERROR; return; } // invariant-character conversion to UChars (see utypes.h and putil.h) UChar uCurrency[4]; u_charsToUChars(currency, uCurrency, 4); // set the currency // in ICU 3.0 this API (which was @draft ICU 2.6) gained a UErrorCode& argument #if (U_ICU_VERSION_MAJOR_NUM < 3) nf.setCurrency(uCurrency); #else nf.setCurrency(uCurrency, errorCode); #endif }
static jint getCurrencyFractionDigitsNative(JNIEnv* env, jclass clazz, jstring currencyCode) { UErrorCode status = U_ZERO_ERROR; NumberFormat* fmt = NumberFormat::createCurrencyInstance(status); if (U_FAILURE(status)) { return -1; } const jchar* cCode = env->GetStringChars(currencyCode, NULL); fmt->setCurrency(cCode, status); env->ReleaseStringChars(currencyCode, cCode); if (U_FAILURE(status)) { return -1; } // for CurrencyFormats the minimum and maximum fraction digits are the same. int result = fmt->getMinimumFractionDigits(); delete fmt; return result; }