diff options
author | Laurent Balland-Poirier <laurent.balland-poirier@laposte.net> | 2015-02-20 09:54:01 +0100 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2015-02-23 20:26:34 +0000 |
commit | cc8a2d00387d554cd4d694503dd25fa8f950a78f (patch) | |
tree | b0ad643d6a0252c7dd359a203c89c5e3533b8fb5 /svl/source/numbers | |
parent | d1f679cacb2e17c4aa94ae6b9f15011c9ec74b25 (diff) |
tdf#88835 Calc: General format: 2 digits in exponent
Create 4 new formats enums rtl_math_StringFormat:
rtl_math_StringFormat_E1, rtl_math_StringFormat_E2,
rtl_math_StringFormat_G1, rtl_math_StringFormat_G2
to 1 or 2 digits in exponent for scientific notation.
Set General format to use rtl_math_StringFormat_E2.
Set trendline equation in status bar to use rtl_math_StringFormat_E1
Change-Id: I41466a6d4ba808ba5b9b38ba252b37c6b4560f12
Reviewed-on: https://gerrit.libreoffice.org/14562
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Eike Rathke <erack@redhat.com>
Diffstat (limited to 'svl/source/numbers')
-rw-r--r-- | svl/source/numbers/zformat.cxx | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx index 45093a9aba29..bffdd53368f4 100644 --- a/svl/source/numbers/zformat.cxx +++ b/svl/source/numbers/zformat.cxx @@ -1711,27 +1711,27 @@ OUString SvNumberformat::StripNewCurrencyDelimiters( const OUString& rStr, return aTmp; } -void SvNumberformat::ImpGetOutputStandard(double& fNumber, OUStringBuffer& OutString) +void SvNumberformat::ImpGetOutputStandard(double& fNumber, OUStringBuffer& rOutString) { OUString sTemp; ImpGetOutputStandard(fNumber, sTemp); - OutString = sTemp; + rOutString = sTemp; } -void SvNumberformat::ImpGetOutputStandard(double& fNumber, OUString& OutString) +void SvNumberformat::ImpGetOutputStandard(double& fNumber, OUString& rOutString) { sal_uInt16 nStandardPrec = rScan.GetStandardPrec(); if ( fabs(fNumber) > 1.0E15 ) // #58531# was E16 { nStandardPrec = ::std::min(nStandardPrec, static_cast<sal_uInt16>(14)); // limits to 14 decimals - OutString = ::rtl::math::doubleToUString( fNumber, - rtl_math_StringFormat_E, nStandardPrec /*2*/, + rOutString = ::rtl::math::doubleToUString( fNumber, + rtl_math_StringFormat_E2, nStandardPrec /*2*/, GetFormatter().GetNumDecimalSep()[0]); } else { - ImpGetOutputStdToPrecision(fNumber, OutString, nStandardPrec); + ImpGetOutputStdToPrecision(fNumber, rOutString, nStandardPrec); } } @@ -1959,8 +1959,13 @@ void lcl_GetOutputStringScientific(double fNumber, sal_uInt16 nCharCount, { bool bSign = ::rtl::math::isSignBitSet(fNumber); - // 1.000E+015 (one digit and the decimal point, and the five chars for the exponential part, totalling 7). - sal_uInt16 nPrec = nCharCount > 7 ? nCharCount - 7 : 0; + // 1.000E+015 (one digit and the decimal point, and the two chars + + // nExpDigit for the exponential part, totalling 6 or 7). + double fExp = log10( fabs(fNumber) ); + if( fExp < 0.0 ) + fExp = 1.0 - fExp; + sal_uInt16 nCharFormat = 6 + (fExp >= 100.0 ? 1 : 0); + sal_uInt16 nPrec = nCharCount > nCharFormat ? nCharCount - nCharFormat : 0; if (nPrec && bSign) { // Make room for the negative sign. @@ -1968,7 +1973,7 @@ void lcl_GetOutputStringScientific(double fNumber, sal_uInt16 nCharCount, } nPrec = ::std::min(nPrec, static_cast<sal_uInt16>(14)); // limit to 14 decimals. - rOutString = ::rtl::math::doubleToUString(fNumber, rtl_math_StringFormat_E, + rOutString = ::rtl::math::doubleToUString(fNumber, rtl_math_StringFormat_E2, nPrec, rFormatter.GetNumDecimalSep()[0]); } @@ -2129,7 +2134,7 @@ bool SvNumberformat::GetOutputString(double fNumber, sal_uInt16 nStandardPrec = rScan.GetStandardPrec(); nStandardPrec = ::std::min(nStandardPrec, static_cast<sal_uInt16>(14)); // limits to 14 decimals sBuff = ::rtl::math::doubleToUString( fNumber, - rtl_math_StringFormat_E, nStandardPrec /*2*/, + rtl_math_StringFormat_E2, nStandardPrec /*2*/, GetFormatter().GetNumDecimalSep()[0], true); } } |