sal/rtl/math.cxx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-)
New commits: commit b7f62ed447ace5a6e7a0a5188cb72c635736b7f9 Author: Eike Rathke <er...@redhat.com> AuthorDate: Fri Aug 9 15:11:09 2019 +0200 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Fri Aug 30 10:37:36 2019 +0200 Resolves: tdf#126766 fix rounding correction at start of negative values doubleToString() is entered with an inaccuracy afflicted fValue=-9999.9999999999927 for which the rounding into the next magnitude incremented the '-' character to '.' instead of appending a '1' (and '0' and then "000") thus yielded ".0000" instead of "-10000" This seems to have been always the case. Change-Id: I66170defa71fec40ca0b85f68affde8eff0d5ccb Reviewed-on: https://gerrit.libreoffice.org/77208 Reviewed-by: Eike Rathke <er...@redhat.com> Tested-by: Jenkins (cherry picked from commit be8da97976658ff19b4dd010bff328cd3f424c1b) Reviewed-on: https://gerrit.libreoffice.org/77216 Reviewed-by: Michael Stahl <michael.st...@cib.de> Reviewed-on: https://gerrit.libreoffice.org/77911 Reviewed-by: Andras Timar <andras.ti...@collabora.com> Tested-by: Andras Timar <andras.ti...@collabora.com> diff --git a/sal/rtl/math.cxx b/sal/rtl/math.cxx index 9fd7983f8787..18ee802316bb 100644 --- a/sal/rtl/math.cxx +++ b/sal/rtl/math.cxx @@ -546,9 +546,13 @@ void doubleToString(typename T::String ** pResult, if (nDigit >= 10) { // after-treatment of up-rounding to the next decade sal_Int32 sLen = static_cast< long >(p-pBuf)-1; - if (sLen == -1) + if (sLen == -1 || (sLen == 0 && bSign)) { + // Assert that no one changed the logic we rely on. + assert(!bSign || *pBuf == static_cast< typename T::Char >('-')); p = pBuf; + if (bSign) + ++p; if (eFormat == rtl_math_StringFormat_F) { *p++ = static_cast< typename T::Char >('1'); @@ -568,6 +572,12 @@ void doubleToString(typename T::String ** pResult, for (sal_Int32 j = sLen; j >= 0; j--) { typename T::Char cS = pBuf[j]; + if (j == 0 && bSign) + { + // Do not touch leading minus sign put earlier. + assert(cS == static_cast< typename T::Char >('-')); + break; // for, this is the last character backwards. + } if (cS != cDecSeparator) { if (cS != static_cast< typename T::Char >('9')) @@ -578,7 +588,7 @@ void doubleToString(typename T::String ** pResult, else { pBuf[j] = static_cast< typename T::Char >('0'); - if (j == 0) + if (j == 0 || (j == 1 && bSign)) { if (eFormat == rtl_math_StringFormat_F) { // insert '1' _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits