ICU-11276 Move rounding into preProcess function since the micro generator could have already applied rounding.

This commit is contained in:
Shane Carr 2018-09-05 16:25:10 -07:00
parent 083fe73d6b
commit c5e458ba8d
No known key found for this signature in database
GPG key ID: FCED3B24AAB18B5C
2 changed files with 8 additions and 17 deletions

View file

@ -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").

View file

@ -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 &macros, bool safe, UErrorCode &status);
static int32_t
writeNumber(const MicroProps &micros, DecimalQuantity &quantity, NumberStringBuilder &string,
int32_t index, UErrorCode &status);
static int32_t
writeIntegerDigits(const MicroProps &micros, DecimalQuantity &quantity, NumberStringBuilder &string,
int32_t index, UErrorCode &status);