From 1a8fdb5b51acde992369563072dc433cf5e9dae4 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Mon, 16 Sep 2024 14:31:59 -0700 Subject: [PATCH] Update icu4c/source/i18n/messageformat2_function_registry.cpp Co-authored-by: Elango Cheran --- .../i18n/messageformat2_function_registry.cpp | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/icu4c/source/i18n/messageformat2_function_registry.cpp b/icu4c/source/i18n/messageformat2_function_registry.cpp index ec912e5af7a6..c9661f97bbfe 100644 --- a/icu4c/source/i18n/messageformat2_function_registry.cpp +++ b/icu4c/source/i18n/messageformat2_function_registry.cpp @@ -482,17 +482,12 @@ static int32_t parseDigits(const UnicodeString& s, int32_t& i) { static double parseDecimalPart(const UnicodeString& s, int32_t& i) { int32_t firstDigit = i; - // Assumes that i < s.length() and s[i] is a digit - while (isDigit(s[i])) { - i++; - } - int32_t numDigits = i - firstDigit; - double placeValue = 10; - double result = 0; - for (int32_t j = firstDigit; j < firstDigit + numDigits; j++) { - result += ((double) parseDigit(s[j])) / placeValue; - placeValue *= 10; + double result = (double) parseDigits(s, i); + int32_t denominator = 1; + for (int32_t j = i; j > firstDigit; j--) { + denominator *= 10; } + result /= denominator; return result; }