diff --git a/fxjs/xfa/cfxjse_formcalc_context.cpp b/fxjs/xfa/cfxjse_formcalc_context.cpp
index 00ae76f..6fb3459 100644
--- a/fxjs/xfa/cfxjse_formcalc_context.cpp
+++ b/fxjs/xfa/cfxjse_formcalc_context.cpp
@@ -1753,7 +1753,7 @@
   }
 
   CFGAS_Decimal decimalValue(static_cast<float>(dValue), uPrecision);
-  args.GetReturnValue()->SetDouble(decimalValue);
+  args.GetReturnValue()->SetDouble(decimalValue.ToDouble());
 }
 
 // static
diff --git a/fxjs/xfa/cjx_field.cpp b/fxjs/xfa/cjx_field.cpp
index 53cf91b..1b41a27 100644
--- a/fxjs/xfa/cjx_field.cpp
+++ b/fxjs/xfa/cjx_field.cpp
@@ -283,7 +283,7 @@
       pValue->SetString(content.ToUTF8().AsStringView());
     } else {
       CFGAS_Decimal decimal(content.AsStringView());
-      pValue->SetFloat((float)(double)decimal);
+      pValue->SetFloat(decimal.ToFloat());
     }
   } else if (pNode && pNode->GetElementType() == XFA_Element::Integer) {
     pValue->SetInteger(FXSYS_wtoi(content.c_str()));
@@ -291,7 +291,7 @@
     pValue->SetBoolean(FXSYS_wtoi(content.c_str()) == 0 ? false : true);
   } else if (pNode && pNode->GetElementType() == XFA_Element::Float) {
     CFGAS_Decimal decimal(content.AsStringView());
-    pValue->SetFloat((float)(double)decimal);
+    pValue->SetFloat(decimal.ToFloat());
   } else {
     pValue->SetString(content.ToUTF8().AsStringView());
   }
diff --git a/fxjs/xfa/cjx_object.cpp b/fxjs/xfa/cjx_object.cpp
index 860a612..3ae47cc 100644
--- a/fxjs/xfa/cjx_object.cpp
+++ b/fxjs/xfa/cjx_object.cpp
@@ -1460,7 +1460,7 @@
     pValue->SetInteger(FXSYS_wtoi(content.c_str()));
   } else if (eType == XFA_Element::Float || eType == XFA_Element::Decimal) {
     CFGAS_Decimal decimal(content.AsStringView());
-    pValue->SetFloat((float)(double)decimal);
+    pValue->SetFloat(decimal.ToFloat());
   } else {
     pValue->SetString(content.ToUTF8().AsStringView());
   }
diff --git a/xfa/fgas/BUILD.gn b/xfa/fgas/BUILD.gn
index e2f84c6..76db6a1 100644
--- a/xfa/fgas/BUILD.gn
+++ b/xfa/fgas/BUILD.gn
@@ -49,6 +49,7 @@
 
 pdfium_unittest_source_set("unittests") {
   sources = [
+    "crt/cfgas_decimal_unittest.cpp",
     "crt/cfgas_formatstring_unittest.cpp",
   ]
   deps = [
diff --git a/xfa/fgas/crt/cfgas_decimal.cpp b/xfa/fgas/crt/cfgas_decimal.cpp
index f83d46f..4783ca1 100644
--- a/xfa/fgas/crt/cfgas_decimal.cpp
+++ b/xfa/fgas/crt/cfgas_decimal.cpp
@@ -329,7 +329,7 @@
   m_uFlags = FXMATH_DECIMAL_MAKEFLAGS(negmet && IsNotZero(), scale);
 }
 
-CFGAS_Decimal::operator WideString() const {
+WideString CFGAS_Decimal::ToWideString() const {
   WideString retString;
   WideString tmpbuf;
   uint64_t phi = m_uHi;
@@ -355,7 +355,11 @@
   return retString;
 }
 
-CFGAS_Decimal::operator double() const {
+float CFGAS_Decimal::ToFloat() const {
+  return static_cast<float>(ToDouble());
+}
+
+double CFGAS_Decimal::ToDouble() const {
   double pow = (double)(1 << 16) * (1 << 16);
   double base = static_cast<double>(m_uHi) * pow * pow +
                 static_cast<double>(m_uMid) * pow + static_cast<double>(m_uLo);
diff --git a/xfa/fgas/crt/cfgas_decimal.h b/xfa/fgas/crt/cfgas_decimal.h
index e48e076..1b524b5 100644
--- a/xfa/fgas/crt/cfgas_decimal.h
+++ b/xfa/fgas/crt/cfgas_decimal.h
@@ -18,8 +18,9 @@
   CFGAS_Decimal(float val, uint8_t scale);
   explicit CFGAS_Decimal(WideStringView str);
 
-  operator WideString() const;
-  operator double() const;
+  WideString ToWideString() const;
+  float ToFloat() const;
+  double ToDouble() const;
 
   CFGAS_Decimal operator*(const CFGAS_Decimal& val) const;
   CFGAS_Decimal operator/(const CFGAS_Decimal& val) const;
diff --git a/xfa/fgas/crt/cfgas_decimal_unittest.cpp b/xfa/fgas/crt/cfgas_decimal_unittest.cpp
new file mode 100644
index 0000000..b1581b5
--- /dev/null
+++ b/xfa/fgas/crt/cfgas_decimal_unittest.cpp
@@ -0,0 +1,16 @@
+// Copyright 2019 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "xfa/fgas/crt/cfgas_decimal.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/base/ptr_util.h"
+#include "xfa/fxfa/parser/cxfa_localemgr.h"
+
+TEST(CFGAS_Decimal, Empty) {
+  CFGAS_Decimal empty;
+  EXPECT_EQ(L"0", empty.ToWideString());
+  EXPECT_EQ(0.0f, empty.ToFloat());
+  EXPECT_EQ(0.0, empty.ToDouble());
+}
diff --git a/xfa/fgas/crt/cfgas_formatstring.cpp b/xfa/fgas/crt/cfgas_formatstring.cpp
index b1b2f41..7cc6d93 100644
--- a/xfa/fgas/crt/cfgas_formatstring.cpp
+++ b/xfa/fgas/crt/cfgas_formatstring.cpp
@@ -1537,7 +1537,7 @@
     if (bHavePercentSymbol)
       decimal = decimal / CFGAS_Decimal(100);
 
-    *wsValue = decimal;
+    *wsValue = decimal.ToWideString();
   }
   if (bNeg)
     wsValue->InsertAtFront(L'-');
@@ -1877,7 +1877,7 @@
   CFGAS_Decimal decimal = CFGAS_Decimal(wsSrcNum.AsStringView());
   if (dwNumStyle & FX_NUMSTYLE_Percent) {
     decimal = decimal * CFGAS_Decimal(100);
-    wsSrcNum = decimal;
+    wsSrcNum = decimal.ToWideString();
   }
 
   int32_t exponent = 0;
@@ -1901,17 +1901,17 @@
       threshold *= 10;
       fixed_count--;
     }
-    if (decimal != CFGAS_Decimal(0)) {
-      if (decimal < CFGAS_Decimal(threshold)) {
+    if (decimal.ToDouble() != 0.0) {
+      if (decimal.ToDouble() < threshold) {
         decimal = decimal * CFGAS_Decimal(10);
         exponent = -1;
-        while (decimal < CFGAS_Decimal(threshold)) {
+        while (decimal.ToDouble() < threshold) {
           decimal = decimal * CFGAS_Decimal(10);
           exponent -= 1;
         }
-      } else if (decimal > CFGAS_Decimal(threshold)) {
+      } else if (decimal.ToDouble() > threshold) {
         threshold *= 10;
-        while (decimal > CFGAS_Decimal(threshold)) {
+        while (decimal.ToDouble() > threshold) {
           decimal = decimal / CFGAS_Decimal(10);
           exponent += 1;
         }
@@ -1925,7 +1925,7 @@
   int32_t scale = decimal.GetScale();
   if (iTreading < scale) {
     decimal.SetScale(iTreading);
-    wsSrcNum = decimal;
+    wsSrcNum = decimal.ToWideString();
   }
   if (bTrimTailZeros && scale > 0 && iTreading > 0) {
     wsSrcNum.TrimRight(L"0");
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index 90acafb..eab72cb 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -4892,7 +4892,7 @@
           if (iTread != -1) {
             CFGAS_Decimal wsDeci = CFGAS_Decimal(wsValue.AsStringView());
             wsDeci.SetScale(iTread);
-            wsRet = wsDeci;
+            wsRet = wsDeci.ToWideString();
           }
           return wsRet;
         }
