From e7f769bc67d3f132b477b3c253f8065243b9b8ac Mon Sep 17 00:00:00 2001 From: Laurent Balland-Poirier Date: Thu, 16 Feb 2017 22:15:37 +0100 Subject: [PATCH] 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 Reviewed-by: Eike Rathke --- 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(-) diff --git a/include/svl/zforlist.hxx b/include/svl/zforlist.hxx index fdc00627d051..81c57d732cb4 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 a50281b536ac..cfb3e3a97368 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 fed6c0d043f0..6a1110b6cd80 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 2ddd6424918f..b4621bca5b9f 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 );