You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.7 KiB
59 lines
1.7 KiB
6 years ago
|
From 68e0c8e4c834df57bc9a0e8da72151f69ff5e7a6 Mon Sep 17 00:00:00 2001
|
||
|
From: David Tardon <dtardon@redhat.com>
|
||
|
Date: Fri, 12 Aug 2016 12:50:39 +0200
|
||
|
Subject: [PATCH] tdf#101077 make double->string conversion locale-agnostic
|
||
|
|
||
|
---
|
||
|
src/OdsGenerator.cxx | 19 +++++++++++++++++--
|
||
|
1 file changed, 17 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/src/OdsGenerator.cxx b/src/OdsGenerator.cxx
|
||
|
index 52e135e..8cb7203 100644
|
||
|
--- a/src/OdsGenerator.cxx
|
||
|
+++ b/src/OdsGenerator.cxx
|
||
|
@@ -26,6 +26,8 @@
|
||
|
|
||
|
#include <librevenge/librevenge.h>
|
||
|
|
||
|
+#include <iomanip>
|
||
|
+#include <locale>
|
||
|
#include <map>
|
||
|
#include <stack>
|
||
|
#include <sstream>
|
||
|
@@ -46,6 +48,19 @@
|
||
|
#include "OdcGenerator.hxx"
|
||
|
#include "OdfGenerator.hxx"
|
||
|
|
||
|
+namespace
|
||
|
+{
|
||
|
+
|
||
|
+librevenge::RVNGString makePreciseStr(const double value)
|
||
|
+{
|
||
|
+ std::ostringstream os;
|
||
|
+ os.imbue(std::locale::classic());
|
||
|
+ os << std::fixed << std::setprecision(8) << value;
|
||
|
+ return os.str().c_str();
|
||
|
+}
|
||
|
+
|
||
|
+}
|
||
|
+
|
||
|
class OdsGeneratorPrivate : public OdfGenerator
|
||
|
{
|
||
|
public:
|
||
|
@@ -968,10 +983,10 @@ void OdsGenerator::openSheetCell(const librevenge::RVNGPropertyList &propList)
|
||
|
// we need the maximum precision here, so we must avoid getStr() when possible
|
||
|
librevenge::RVNGString value;
|
||
|
if (propList["librevenge:value"]->getUnit()==librevenge::RVNG_GENERIC)
|
||
|
- value.sprintf("%.8f", propList["librevenge:value"]->getDouble());
|
||
|
+ value = makePreciseStr(propList["librevenge:value"]->getDouble());
|
||
|
else if (propList["librevenge:value"]->getUnit()==librevenge::RVNG_PERCENT)
|
||
|
{
|
||
|
- value.sprintf("%.8f", propList["librevenge:value"]->getDouble()*100.);
|
||
|
+ value = makePreciseStr(propList["librevenge:value"]->getDouble()*100.);
|
||
|
value.append('%');
|
||
|
}
|
||
|
else
|
||
|
--
|
||
|
2.7.4
|
||
|
|