summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2017-02-15 22:01:51 +0100
committerChristian Lohmaier <lohmaier+LibreOffice@googlemail.com>2017-02-16 11:00:16 +0000
commit1e026b88662494df52e4c3eb372ee29e9f30c4f4 (patch)
tree1420b54a447383503baf17ae2672fd78476c9034
parent2247313b0aec80306e7f67926810cf004d5b4d1d (diff)
Resolves: tdf#105968 handle engineering notation rounded into next magnitude
Change-Id: Ie31ab88543994f0e8aeef8152c230c05e071ef8e (cherry picked from commit 63bc2b13cb344cce99348496838d7d2c2f690211) Reviewed-on: https://gerrit.libreoffice.org/34322 Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com> Tested-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
-rw-r--r--svl/source/numbers/zformat.cxx11
1 files changed, 11 insertions, 0 deletions
diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx
index 24ca0f9e89fd..6e740b3f4df0 100644
--- a/svl/source/numbers/zformat.cxx
+++ b/svl/source/numbers/zformat.cxx
@@ -2347,11 +2347,22 @@ bool SvNumberformat::ImpGetScientificOutput(double fNumber,
nExpSign = 1;
}
ExpStr = OUString::number( nExp );
+ const sal_Unicode cFirstDigit = sStr[0];
// rescale mantissa
sStr = ::rtl::math::doubleToUString( fNumber,
rtl_math_StringFormat_E,
nRescale + rInfo.nCntPost, '.' );
+
+ // sStr now may contain a rounded-up value shifted into the next
+ // magnitude, for example 1.000E+02 (4 digits) for fNumber 99.995
+ // (9.9995E+02 rounded to 3 decimals) but we want the final result
+ // to be 100.00E+00 (5 digits), so for the following fill routines
+ // below to work correctly append a zero decimal.
+ /* TODO: this is awkward, could an engineering notation mode be
+ * introduced to rtl_math_doubleToUString()? */
sStr.truncate( sStr.indexOf('E') );
+ if (sStr[0] == '1' && cFirstDigit != '1')
+ sStr.append('0');
}
// cut any decimal delimiter