[Libreoffice-commits] core.git: include/svl sc/source svl/source

Laurent Balland-Poirier laurent.balland-poirier at laposte.net
Tue Feb 21 12:32:16 UTC 2017


 include/svl/zforlist.hxx         |    3 +++
 include/svl/zformat.hxx          |    3 ++-
 sc/source/core/data/documen4.cxx |    2 +-
 svl/source/numbers/zforlist.cxx  |   12 ++++++++++++
 4 files changed, 18 insertions(+), 2 deletions(-)

New commits:
commit e7f769bc67d3f132b477b3c253f8065243b9b8ac
Author: Laurent Balland-Poirier <laurent.balland-poirier at laposte.net>
Date:   Thu Feb 16 22:15:37 2017 +0100

    tdf#106052 Treat SubFormat for "Precision as shown"
    
    Get precision from the correct subformat
    
    Change-Id: I458e5b3d1fb515864f19499ac9ac529e1d68a267
    Reviewed-on: https://gerrit.libreoffice.org/34505
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Eike Rathke <erack at redhat.com>

diff --git a/include/svl/zforlist.hxx b/include/svl/zforlist.hxx
index fdc0062..81c57d7 100644
--- a/include/svl/zforlist.hxx
+++ b/include/svl/zforlist.hxx
@@ -516,6 +516,9 @@ public:
     /// Count of decimals
     sal_uInt16 GetFormatPrecision( sal_uInt32 nFormat ) const;
 
+    /// Count of decimals with correct subformat according to fValue
+    sal_uInt16 GetFormatPrecision( sal_uInt32 nFormat, double fValue ) const;
+
     /// Count of integer digits
     sal_uInt16 GetFormatIntegerDigits( sal_uInt32 nFormat ) const;
 
diff --git a/include/svl/zformat.hxx b/include/svl/zformat.hxx
index a50281b..cfb3e3a 100644
--- a/include/svl/zformat.hxx
+++ b/include/svl/zformat.hxx
@@ -219,7 +219,8 @@ public:
     sal_uInt16 GetSubformatIndex( double fNumber ) const;
 
     /// Count of decimal precision
-    sal_uInt16 GetFormatPrecision() const   { return NumFor[0].Info().nCntPost; }
+    sal_uInt16 GetFormatPrecision( sal_uInt16 nIx = 0 ) const
+        { return NumFor[nIx].Info().nCntPost; }
 
     /// Count of integer digits
     sal_uInt16 GetFormatIntegerDigits() const { return NumFor[0].Info().nCntPre; }
diff --git a/sc/source/core/data/documen4.cxx b/sc/source/core/data/documen4.cxx
index fed6c0d..6a1110b 100644
--- a/sc/source/core/data/documen4.cxx
+++ b/sc/source/core/data/documen4.cxx
@@ -660,7 +660,7 @@ double ScDocument::RoundValueAsShown( double fVal, sal_uInt32 nFormat ) const
         short nPrecision;
         if ((nFormat % SV_COUNTRY_LANGUAGE_OFFSET) != 0)
         {
-            nPrecision = (short)pFormat->GetFormatPrecision();
+            nPrecision = (short)GetFormatTable()->GetFormatPrecision( nFormat, fVal );
             switch ( nType )
             {
                 case css::util::NumberFormat::PERCENT:      // 0.41% == 0.0041
diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx
index 2ddd642..b4621bc 100644
--- a/svl/source/numbers/zforlist.cxx
+++ b/svl/source/numbers/zforlist.cxx
@@ -1980,6 +1980,18 @@ sal_uInt16 SvNumberFormatter::GetFormatPrecision( sal_uInt32 nFormat ) const
         return pFormatScanner->GetStandardPrec();
 }
 
+sal_uInt16 SvNumberFormatter::GetFormatPrecision( sal_uInt32 nFormat, double fValue ) const
+{
+    const SvNumberformat* pFormat = GetFormatEntry( nFormat );
+    if ( pFormat )
+    {
+        sal_uInt16 nIx = pFormat->GetSubformatIndex( fValue );
+        return pFormat->GetFormatPrecision( nIx );
+    }
+    else
+        return pFormatScanner->GetStandardPrec();
+}
+
 sal_uInt16 SvNumberFormatter::GetFormatIntegerDigits( sal_uInt32 nFormat ) const
 {
     const SvNumberformat* pFormat = GetFormatEntry( nFormat );


More information about the Libreoffice-commits mailing list