diff options
Diffstat (limited to 'svl/source/numbers/zformat.cxx')
-rw-r--r-- | svl/source/numbers/zformat.cxx | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx index eb96820c9892..8214409e9ae8 100644 --- a/svl/source/numbers/zformat.cxx +++ b/svl/source/numbers/zformat.cxx @@ -789,8 +789,11 @@ SvNumberformat::SvNumberformat(OUString& rString, sBuff.replace( cNNBSp, ' '); } + OUString aConvertFromDecSep; + OUString aConvertToDecSep; if (rScan.GetConvertMode()) { + aConvertFromDecSep = GetFormatter().GetNumDecimalSep(); maLocale.meLanguage = rScan.GetNewLnge(); eLan = maLocale.meLanguage; // Make sure to return switch } @@ -851,6 +854,7 @@ SvNumberformat::SvNumberformat(OUString& rString, sal_Int32 nCntChars = ImpGetNumber(sBuff, nPos, sStr); if (nCntChars > 0) { + sal_Int32 nDecPos; SvNumFormatType F_Type = SvNumFormatType::UNDEFINED; if (!pISc->IsNumberFormat(sStr, F_Type, fNumber, nullptr) || ( F_Type != SvNumFormatType::NUMBER && @@ -862,6 +866,20 @@ SvNumberformat::SvNumberformat(OUString& rString, sBuff.insert(nPos, '0'); nPos++; } + else if (rScan.GetConvertMode() && ((nDecPos = sStr.indexOf( aConvertFromDecSep)) >= 0)) + { + if (aConvertToDecSep.isEmpty()) + aConvertToDecSep = GetFormatter().GetLangDecimalSep( rScan.GetNewLnge()); + if (aConvertToDecSep != aConvertFromDecSep) + { + const OUString aStr( sStr.replaceAt( nDecPos, + aConvertFromDecSep.getLength(), aConvertToDecSep)); + nPos = nPos - nCntChars; + sBuff.remove(nPos, nCntChars); + sBuff.insert(nPos, aStr); + nPos += aStr.getLength(); + } + } } else { |