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 /sal | |
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 'sal')
-rw-r--r-- | sal/rtl/math.cxx | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/sal/rtl/math.cxx b/sal/rtl/math.cxx index d74f5020bc1a..36a66a8711cf 100644 --- a/sal/rtl/math.cxx +++ b/sal/rtl/math.cxx @@ -368,13 +368,20 @@ inline void doubleToString(StringT ** pResult, } break; case rtl_math_StringFormat_G : + case rtl_math_StringFormat_G1 : + case rtl_math_StringFormat_G2 : { // G-Point, similar to sprintf %G if ( nDecPlaces == rtl_math_DecimalPlaces_DefaultSignificance ) nDecPlaces = 6; if ( nExp < -4 || nExp >= nDecPlaces ) { nDecPlaces = std::max< sal_Int32 >( 1, nDecPlaces - 1 ); - eFormat = rtl_math_StringFormat_E; + if( eFormat == rtl_math_StringFormat_G ) + eFormat = rtl_math_StringFormat_E; + else if( eFormat == rtl_math_StringFormat_G2 ) + eFormat = rtl_math_StringFormat_E2; + else if( eFormat == rtl_math_StringFormat_G1 ) + eFormat = rtl_math_StringFormat_E1; } else { @@ -593,9 +600,9 @@ inline void doubleToString(StringT ** pResult, } // Print the exponent ('E', followed by '+' or '-', followed by exactly - // three digits). The code in rtl_[u]str_valueOf{Float|Double} relies on - // this format. - if( eFormat == rtl_math_StringFormat_E ) + // three digits for rtl_math_StringFormat_E). The code in + // rtl_[u]str_valueOf{Float|Double} relies on this format. + if( eFormat == rtl_math_StringFormat_E || eFormat == rtl_math_StringFormat_E2 || eFormat == rtl_math_StringFormat_E1 ) { if ( p == pBuf ) *p++ = static_cast< typename T::Char >('1'); @@ -608,12 +615,13 @@ inline void doubleToString(StringT ** pResult, } else *p++ = static_cast< typename T::Char >('+'); -// if (nExp >= 100 ) - *p++ = static_cast< typename T::Char >( - nExp / 100 + static_cast< typename T::Char >('0') ); + if ( eFormat == rtl_math_StringFormat_E || nExp >= 100 ) + *p++ = static_cast< typename T::Char >( + nExp / 100 + static_cast< typename T::Char >('0') ); nExp %= 100; - *p++ = static_cast< typename T::Char >( - nExp / 10 + static_cast< typename T::Char >('0') ); + if ( eFormat == rtl_math_StringFormat_E || eFormat == rtl_math_StringFormat_E2 || nExp >= 10 ) + *p++ = static_cast< typename T::Char >( + nExp / 10 + static_cast< typename T::Char >('0') ); *p++ = static_cast< typename T::Char >( nExp % 10 + static_cast< typename T::Char >('0') ); } |