This is an automated email from the ASF dual-hosted git repository.

jimjag pushed a commit to branch odf-devel
in repository https://gitbox.apache.org/repos/asf/openoffice.git

commit 4250607123a41ae3080c43f5d896a0c16f391c1f
Author: Jim Jagielski <[email protected]>
AuthorDate: Thu Oct 22 16:27:15 2026 -0400

    xmloff: write a non-0/1 boolean cell value as a float
---
 main/xmloff/source/style/numehelp.cxx | 62 +++++++++++++++++------------------
 1 file changed, 30 insertions(+), 32 deletions(-)

diff --git a/main/xmloff/source/style/numehelp.cxx 
b/main/xmloff/source/style/numehelp.cxx
index 3be8575c66..b74f40be6b 100644
--- a/main/xmloff/source/style/numehelp.cxx
+++ b/main/xmloff/source/style/numehelp.cxx
@@ -189,33 +189,32 @@ void 
XMLNumberFormatAttributesExportHelper::WriteAttributes(SvXMLExport& rXMLExp
                break;
        case util::NumberFormat::LOGICAL:
                {
+                       const sal_Bool bIsTrue = ::rtl::math::approxEqual( 
rValue, 1.0 );
+                       const sal_Bool bIsFalse = ::rtl::math::approxEqual( 
rValue, 0.0 );
+                       const sal_Bool bAsFloat = bExportValue && !bIsTrue && 
!bIsFalse;
                        if (!bWasSetTypeAttribute)
                        {
-                               rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, 
XML_VALUE_TYPE, XML_BOOLEAN);
+                               rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, 
XML_VALUE_TYPE, bAsFloat ? XML_FLOAT : XML_BOOLEAN);
                                bWasSetTypeAttribute = sal_True;
                        }
                        if (bExportValue)
                        {
-                               double fTempValue = rValue;
-                               if (::rtl::math::approxEqual( fTempValue, 1.0 ))
+                               if (bIsTrue)
                                {
                                        
rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_BOOLEAN_VALUE, XML_TRUE);
                                }
+                               else if (bIsFalse)
+                               {
+                                       
rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_BOOLEAN_VALUE, XML_FALSE);
+                               }
                                else
                                {
-                                       if (::rtl::math::approxEqual( rValue, 
0.0 ))
-                                       {
-                                               
rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_BOOLEAN_VALUE, XML_FALSE);
-                                       }
-                                       else
-                                       {
-                        rtl::OUString sValue( ::rtl::math::doubleToUString(
-                                    fTempValue,
-                                    rtl_math_StringFormat_Automatic,
-                                    rtl_math_DecimalPlaces_Max, '.',
-                                    sal_True));
-                                               
rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_BOOLEAN_VALUE, sValue);
-                                       }
+                                       rtl::OUString sValue( 
::rtl::math::doubleToUString(
+                                                               rValue,
+                                                               
rtl_math_StringFormat_Automatic,
+                                                               
rtl_math_DecimalPlaces_Max, '.',
+                                                               sal_True));
+                                       
rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE, sValue);
                                }
                        }
                }
@@ -472,33 +471,32 @@ void 
XMLNumberFormatAttributesExportHelper::WriteAttributes(
                break;
        case util::NumberFormat::LOGICAL:
                {
+                       const sal_Bool bIsTrue = ::rtl::math::approxEqual( 
rValue, 1.0 );
+                       const sal_Bool bIsFalse = ::rtl::math::approxEqual( 
rValue, 0.0 );
+                       const sal_Bool bAsFloat = bExportValue && !bIsTrue && 
!bIsFalse;
                        if (!bWasSetTypeAttribute)
                        {
-                               pExport->AddAttribute(sAttrValueType, 
XML_BOOLEAN);
+                               pExport->AddAttribute(sAttrValueType, bAsFloat 
? XML_FLOAT : XML_BOOLEAN);
                                bWasSetTypeAttribute = sal_True;
                        }
                        if (bExportValue)
                        {
-                               double fTempValue = rValue;
-                               if (::rtl::math::approxEqual( fTempValue, 1.0 ))
+                               if (bIsTrue)
                                {
                                        
pExport->AddAttribute(sAttrBooleanValue, XML_TRUE);
                                }
+                               else if (bIsFalse)
+                               {
+                                       
pExport->AddAttribute(sAttrBooleanValue, XML_FALSE);
+                               }
                                else
                                {
-                                       if (::rtl::math::approxEqual( rValue, 
0.0 ))
-                                       {
-                                               
pExport->AddAttribute(sAttrBooleanValue, XML_FALSE);
-                                       }
-                                       else
-                                       {
-                        rtl::OUString sValue( ::rtl::math::doubleToUString(
-                                    fTempValue,
-                                    rtl_math_StringFormat_Automatic,
-                                    rtl_math_DecimalPlaces_Max, '.',
-                                    sal_True));
-                                               
pExport->AddAttribute(sAttrBooleanValue, sValue);
-                                       }
+                                       rtl::OUString sValue( 
::rtl::math::doubleToUString(
+                                                               rValue,
+                                                               
rtl_math_StringFormat_Automatic,
+                                                               
rtl_math_DecimalPlaces_Max, '.',
+                                                               sal_True));
+                                       pExport->AddAttribute(sAttrValue, 
sValue);
                                }
                        }
                }

Reply via email to