From: Shane Carr Date: Wed, 5 Sep 2018 23:25:10 +0000 (-0700) Subject: ICU-11276 Move rounding into preProcess function since the micro generator could... X-Git-Tag: release-63-rc~63^2~25 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c5e458ba8dfe917aab4f5348bb0a6018777a6b32;p=icu ICU-11276 Move rounding into preProcess function since the micro generator could have already applied rounding. --- diff --git a/icu4c/source/i18n/number_formatimpl.cpp b/icu4c/source/i18n/number_formatimpl.cpp index b60ba4fb97d..cd1856a0829 100644 --- a/icu4c/source/i18n/number_formatimpl.cpp +++ b/icu4c/source/i18n/number_formatimpl.cpp @@ -76,7 +76,7 @@ void NumberFormatterImpl::formatStatic(const MacroProps& macros, DecimalQuantity NumberFormatterImpl impl(macros, false, status); MicroProps& micros = impl.preProcessUnsafe(inValue, status); if (U_FAILURE(status)) { return; } - int32_t length = formatNumber(micros, inValue, outString, 0, status); + int32_t length = writeNumber(micros, inValue, outString, 0, status); writeAffixes(micros, outString, 0, length, status); } @@ -97,7 +97,7 @@ void NumberFormatterImpl::format(DecimalQuantity& inValue, NumberStringBuilder& MicroProps micros; preProcess(inValue, micros, status); if (U_FAILURE(status)) { return; } - int32_t length = formatNumber(micros, inValue, outString, 0, status); + int32_t length = writeNumber(micros, inValue, outString, 0, status); writeAffixes(micros, outString, 0, length, status); } @@ -109,6 +109,8 @@ void NumberFormatterImpl::preProcess(DecimalQuantity& inValue, MicroProps& micro return; } fMicroPropsGenerator->processQuantity(inValue, microsOut, status); + microsOut.rounder.apply(inValue, status); + microsOut.integerWidth.apply(inValue, status); } MicroProps& NumberFormatterImpl::preProcessUnsafe(DecimalQuantity& inValue, UErrorCode& status) { @@ -120,6 +122,8 @@ MicroProps& NumberFormatterImpl::preProcessUnsafe(DecimalQuantity& inValue, UErr return fMicros; // must always return a value } fMicroPropsGenerator->processQuantity(inValue, fMicros, status); + fMicros.rounder.apply(inValue, status); + fMicros.integerWidth.apply(inValue, status); return fMicros; } @@ -420,15 +424,6 @@ NumberFormatterImpl::resolvePluralRules(const PluralRules* rulesPtr, const Local return fRules.getAlias(); } -int32_t NumberFormatterImpl::formatNumber(const MicroProps& micros, DecimalQuantity& quantity, - NumberStringBuilder& string, int32_t index, - UErrorCode& status) { - micros.rounder.apply(quantity, status); - micros.integerWidth.apply(quantity, status); - int32_t length = writeNumber(micros, quantity, string, index, status); - return length; -} - int32_t NumberFormatterImpl::writeAffixes(const MicroProps& micros, NumberStringBuilder& string, int32_t start, int32_t end, UErrorCode& status) { // Always apply the inner modifier (which is "strong"). diff --git a/icu4c/source/i18n/number_formatimpl.h b/icu4c/source/i18n/number_formatimpl.h index 2fcc58d34ff..e8f0fc3f747 100644 --- a/icu4c/source/i18n/number_formatimpl.h +++ b/icu4c/source/i18n/number_formatimpl.h @@ -68,8 +68,8 @@ class NumberFormatterImpl : public UMemory { * Synthesizes the output string from a MicroProps and DecimalQuantity. * This method formats only the main number, not affixes. */ - static int32_t formatNumber(const MicroProps& micros, DecimalQuantity& quantity, - NumberStringBuilder& string, int32_t index, UErrorCode& status); + static int32_t writeNumber(const MicroProps& micros, DecimalQuantity& quantity, + NumberStringBuilder& string, int32_t index, UErrorCode& status); /** * Adds the affixes. Intended to be called immediately after formatNumber. @@ -131,10 +131,6 @@ class NumberFormatterImpl : public UMemory { const MicroPropsGenerator * macrosToMicroGenerator(const MacroProps ¯os, bool safe, UErrorCode &status); - static int32_t - writeNumber(const MicroProps µs, DecimalQuantity &quantity, NumberStringBuilder &string, - int32_t index, UErrorCode &status); - static int32_t writeIntegerDigits(const MicroProps µs, DecimalQuantity &quantity, NumberStringBuilder &string, int32_t index, UErrorCode &status);