mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-11 08:01:32 +00:00
ICU-11276 Move rounding into preProcess function since the micro generator could have already applied rounding.
This commit is contained in:
parent
083fe73d6b
commit
c5e458ba8d
2 changed files with 8 additions and 17 deletions
|
@ -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").
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue