#include "plurrule_impl.h"
#include "uassert.h"
#include "uhash.h"
+#include "precision.h"
+#include "visibledigits.h"
#if !UCONFIG_NO_FORMATTING
double numberMinusOffset = number - offset;
UnicodeString numberString;
FieldPosition ignorePos;
- FixedDecimal dec(numberMinusOffset);
+ FixedPrecision fp;
+ VisibleDigitsWithExponent dec;
+ fp.initVisibleDigitsWithExponent(numberMinusOffset, dec, status);
+ if (U_FAILURE(status)) {
+ return appendTo;
+ }
if (offset == 0) {
- numberFormat->format(numberObject, numberString, ignorePos, status); // could be BigDecimal etc.
DecimalFormat *decFmt = dynamic_cast<DecimalFormat *>(numberFormat);
if(decFmt != NULL) {
- dec = decFmt->getFixedDecimal(numberObject, status);
+ decFmt->initVisibleDigitsWithExponent(
+ numberObject, dec, status);
+ if (U_FAILURE(status)) {
+ return appendTo;
+ }
+ decFmt->format(dec, numberString, ignorePos, status);
+ } else {
+ numberFormat->format(
+ numberObject, numberString, ignorePos, status); // could be BigDecimal etc.
}
} else {
- numberFormat->format(numberMinusOffset, numberString, ignorePos, status);
DecimalFormat *decFmt = dynamic_cast<DecimalFormat *>(numberFormat);
if(decFmt != NULL) {
- dec = decFmt->getFixedDecimal(numberMinusOffset, status);
+ decFmt->initVisibleDigitsWithExponent(
+ numberMinusOffset, dec, status);
+ if (U_FAILURE(status)) {
+ return appendTo;
+ }
+ decFmt->format(dec, numberString, ignorePos, status);
+ } else {
+ numberFormat->format(
+ numberMinusOffset, numberString, ignorePos, status);
}
}
int32_t partIndex = findSubMessage(msgPattern, 0, pluralRulesWrapper, &dec, number, status);
UnicodeString PluralFormat::PluralSelectorAdapter::select(void *context, double number,
UErrorCode& /*ec*/) const {
(void)number; // unused except in the assertion
- FixedDecimal *dec=static_cast<FixedDecimal *>(context);
- U_ASSERT(dec->source==number);
+ VisibleDigitsWithExponent *dec=static_cast<VisibleDigitsWithExponent *>(context);
return pluralRules->select(*dec);
}