diff options
author | Laurent Balland <laurent.balland@mailo.fr> | 2023-03-19 21:45:52 +0100 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2023-05-13 20:01:50 +0200 |
commit | 8877d27923fb78a92397e48669b91865968cce2f (patch) | |
tree | 3eeda8b214bd85002b18be823a1f9773c9a4f33f /svl | |
parent | 695728fccb1f51902bc582dc62c251146b2ec4ef (diff) |
tdf#153887 Fraction number format: avoid 0/0
If round value is an integer and there is no integer part in the number
format, then nDiv was wrongly forced to 0.
Add corresponding unit tests.
Change-Id: Ib69393eca8f6c2bdda0eacfc83637ab0c971ff2d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149118
Tested-by: Jenkins
Reviewed-by: Eike Rathke <erack@redhat.com>
(cherry picked from commit dc9b8c31aaf72812dc205f610638098898a4cde7)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150085
Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
Diffstat (limited to 'svl')
-rw-r--r-- | svl/qa/unit/svl.cxx | 12 | ||||
-rw-r--r-- | svl/source/numbers/zformat.cxx | 8 |
2 files changed, 17 insertions, 3 deletions
diff --git a/svl/qa/unit/svl.cxx b/svl/qa/unit/svl.cxx index 29bbde9b999d..2b9672d7602d 100644 --- a/svl/qa/unit/svl.cxx +++ b/svl/qa/unit/svl.cxx @@ -1448,6 +1448,18 @@ void Test::testUserDefinedNumberFormats() sExpected = "-575 540/697"; checkPreviewString(aFormatter, sCode, -575.774749601315, eLang, sExpected); } + { // tdf#153887: integer value without integer part displayed + sCode = "#/?"; + sExpected = "2/1"; + checkPreviewString(aFormatter, sCode, 1.95, eLang, sExpected); + checkPreviewString(aFormatter, sCode, 2.00, eLang, sExpected); + checkPreviewString(aFormatter, sCode, 2.05, eLang, sExpected); + sCode = "0/8"; + sExpected = "16/8"; + checkPreviewString(aFormatter, sCode, 1.95, eLang, sExpected); + checkPreviewString(aFormatter, sCode, 2.00, eLang, sExpected); + checkPreviewString(aFormatter, sCode, 2.05, eLang, sExpected); + } { // tdf#102507: left alignment of denominator sCode = "# ?/???"; sExpected = "3 1/2 "; diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx index eb790ee425b0..a19b08375ecd 100644 --- a/svl/source/numbers/zformat.cxx +++ b/svl/source/numbers/zformat.cxx @@ -2835,9 +2835,10 @@ void SvNumberformat::ImpGetFractionElements ( double& fNumber, sal_uInt16 nIx, fIntPart = floor(fNumber); // Integral part fNumber -= fIntPart; // Fractional part const ImpSvNumberformatInfo& rInfo = NumFor[nIx].Info(); - nDiv = lcl_GetDenominatorString( rInfo, NumFor[nIx].GetCount() ).toInt32(); - if( nDiv > 0 ) + sal_Int64 nForcedDiv = lcl_GetDenominatorString( rInfo, NumFor[nIx].GetCount() ).toInt32(); + if( nForcedDiv > 0 ) { // Forced Denominator + nDiv = nForcedDiv; nFrac = static_cast<sal_Int64>(floor ( fNumber * nDiv )); double fFracNew = static_cast<double>(nFrac) / static_cast<double>(nDiv); double fFracNew1 = static_cast<double>(nFrac + 1) / static_cast<double>(nDiv); @@ -2891,7 +2892,8 @@ void SvNumberformat::ImpGetFractionElements ( double& fNumber, sal_uInt16 nIx, if (nFrac >= nDiv) { ++fIntPart; - nFrac = nDiv = 0; + nFrac = 0; + nDiv = ( nForcedDiv > 0 ) ? nForcedDiv : 1; } } |