| Index: source/i18n/digitlst.cpp
|
| ===================================================================
|
| --- source/i18n/digitlst.cpp (revision 88316)
|
| +++ source/i18n/digitlst.cpp (working copy)
|
| @@ -60,6 +60,18 @@
|
|
|
| U_NAMESPACE_BEGIN
|
|
|
| +static void
|
| +loadDecimalChar() {
|
| + if (gDecimal == 0) {
|
| + char rep[MAX_DIGITS];
|
| + // For machines that decide to change the decimal on you,
|
| + // and try to be too smart with localization.
|
| + // This normally should be just a '.'.
|
| + sprintf(rep, "%+1.1f", 1.0);
|
| + gDecimal = rep[2];
|
| + }
|
| +}
|
| +
|
| // -------------------------------------
|
| // default constructor
|
|
|
| @@ -398,15 +410,6 @@
|
| }
|
| DigitList *nonConstThis = const_cast<DigitList *>(this);
|
|
|
| - if (gDecimal == 0) {
|
| - char rep[MAX_DIGITS];
|
| - // For machines that decide to change the decimal on you,
|
| - // and try to be too smart with localization.
|
| - // This normally should be just a '.'.
|
| - sprintf(rep, "%+1.1f", 1.0);
|
| - gDecimal = rep[2];
|
| - }
|
| -
|
| if (isZero()) {
|
| nonConstThis->fDouble = 0.0;
|
| if (decNumberIsNegative(fDecNumber)) {
|
| @@ -441,6 +444,7 @@
|
| }
|
| U_ASSERT(uprv_strlen(&s[0]) < MAX_DBL_DIGITS+18);
|
|
|
| + loadDecimalChar();
|
| if (gDecimal != '.') {
|
| char *decimalPt = strchr(s, '.');
|
| if (decimalPt != NULL) {
|
| @@ -727,6 +731,17 @@
|
| sprintf(rep, "%+1.*e", MAX_DBL_DIGITS - 1, source);
|
| U_ASSERT(uprv_strlen(rep) < sizeof(rep));
|
|
|
| + // uprv_decNumberFromString() will parse the string expecting '.' as a
|
| + // decimal separator, however sprintf() can use ',' in certain locales.
|
| + // Overwrite a different decimal separator with '.' here before proceeding.
|
| + loadDecimalChar();
|
| + if (gDecimal != '.') {
|
| + char *decimalPt = strchr(rep, gDecimal);
|
| + if (decimalPt != NULL) {
|
| + *decimalPt = '.';
|
| + }
|
| + }
|
| +
|
| // Create a decNumber from the string.
|
| uprv_decNumberFromString(fDecNumber, rep, &fContext);
|
| uprv_decNumberTrim(fDecNumber);
|
|
|