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);
