OLD | NEW |
(Empty) | |
| 1 Index: source/i18n/digitlst.cpp |
| 2 =================================================================== |
| 3 --- source/i18n/digitlst.cpp (revision 88316) |
| 4 +++ source/i18n/digitlst.cpp (working copy) |
| 5 @@ -60,6 +60,18 @@ |
| 6 |
| 7 U_NAMESPACE_BEGIN |
| 8 |
| 9 +static void |
| 10 +loadDecimalChar() { |
| 11 + if (gDecimal == 0) { |
| 12 + char rep[MAX_DIGITS]; |
| 13 + // For machines that decide to change the decimal on you, |
| 14 + // and try to be too smart with localization. |
| 15 + // This normally should be just a '.'. |
| 16 + sprintf(rep, "%+1.1f", 1.0); |
| 17 + gDecimal = rep[2]; |
| 18 + } |
| 19 +} |
| 20 + |
| 21 // ------------------------------------- |
| 22 // default constructor |
| 23 |
| 24 @@ -398,15 +410,6 @@ |
| 25 } |
| 26 DigitList *nonConstThis = const_cast<DigitList *>(this); |
| 27 |
| 28 - if (gDecimal == 0) { |
| 29 - char rep[MAX_DIGITS]; |
| 30 - // For machines that decide to change the decimal on you, |
| 31 - // and try to be too smart with localization. |
| 32 - // This normally should be just a '.'. |
| 33 - sprintf(rep, "%+1.1f", 1.0); |
| 34 - gDecimal = rep[2]; |
| 35 - } |
| 36 - |
| 37 if (isZero()) { |
| 38 nonConstThis->fDouble = 0.0; |
| 39 if (decNumberIsNegative(fDecNumber)) { |
| 40 @@ -441,6 +444,7 @@ |
| 41 } |
| 42 U_ASSERT(uprv_strlen(&s[0]) < MAX_DBL_DIGITS+18); |
| 43 |
| 44 + loadDecimalChar(); |
| 45 if (gDecimal != '.') { |
| 46 char *decimalPt = strchr(s, '.'); |
| 47 if (decimalPt != NULL) { |
| 48 @@ -727,6 +731,17 @@ |
| 49 sprintf(rep, "%+1.*e", MAX_DBL_DIGITS - 1, source); |
| 50 U_ASSERT(uprv_strlen(rep) < sizeof(rep)); |
| 51 |
| 52 + // uprv_decNumberFromString() will parse the string expecting '.' as a |
| 53 + // decimal separator, however sprintf() can use ',' in certain locales. |
| 54 + // Overwrite a different decimal separator with '.' here before proceeding. |
| 55 + loadDecimalChar(); |
| 56 + if (gDecimal != '.') { |
| 57 + char *decimalPt = strchr(rep, gDecimal); |
| 58 + if (decimalPt != NULL) { |
| 59 + *decimalPt = '.'; |
| 60 + } |
| 61 + } |
| 62 + |
| 63 // Create a decNumber from the string. |
| 64 uprv_decNumberFromString(fDecNumber, rep, &fContext); |
| 65 uprv_decNumberTrim(fDecNumber); |
OLD | NEW |