diff --git a/fpdfsdk/javascript/Document.cpp b/fpdfsdk/javascript/Document.cpp
index a45b8b9..45c22b1 100644
--- a/fpdfsdk/javascript/Document.cpp
+++ b/fpdfsdk/javascript/Document.cpp
@@ -1468,7 +1468,7 @@
 
   for (int i = 0, sz = pTextObj->CountChars(); i < sz; i++) {
     uint32_t charcode = CPDF_Font::kInvalidCharCode;
-    FX_FLOAT kerning;
+    float kerning;
 
     pTextObj->GetCharInfo(i, &charcode, &kerning);
     CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
@@ -1501,7 +1501,7 @@
 
   for (int i = 0, sz = pTextObj->CountChars(); i < sz; i++) {
     uint32_t charcode = CPDF_Font::kInvalidCharCode;
-    FX_FLOAT kerning;
+    float kerning;
 
     pTextObj->GetCharInfo(i, &charcode, &kerning);
     CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
diff --git a/fpdfsdk/javascript/Field.cpp b/fpdfsdk/javascript/Field.cpp
index 61a2538d..12c3508 100644
--- a/fpdfsdk/javascript/Field.cpp
+++ b/fpdfsdk/javascript/Field.cpp
@@ -575,7 +575,7 @@
 
     CPDF_IconFit IconFit = pFormControl->GetIconFit();
 
-    FX_FLOAT fLeft, fBottom;
+    float fLeft, fBottom;
     IconFit.GetIconPosition(fLeft, fBottom);
 
     vp << (int32_t)fLeft;
@@ -624,7 +624,7 @@
 
     CPDF_IconFit IconFit = pFormControl->GetIconFit();
 
-    FX_FLOAT fLeft, fBottom;
+    float fLeft, fBottom;
     IconFit.GetIconPosition(fLeft, fBottom);
 
     vp << (int32_t)fBottom;
@@ -2003,11 +2003,11 @@
     rcArray.GetElement(pRuntime, 2, Lower_Rightx);
     rcArray.GetElement(pRuntime, 3, Lower_Righty);
 
-    FX_FLOAT pArray[4] = {0.0f, 0.0f, 0.0f, 0.0f};
-    pArray[0] = static_cast<FX_FLOAT>(Upper_Leftx.ToInt(pRuntime));
-    pArray[1] = static_cast<FX_FLOAT>(Lower_Righty.ToInt(pRuntime));
-    pArray[2] = static_cast<FX_FLOAT>(Lower_Rightx.ToInt(pRuntime));
-    pArray[3] = static_cast<FX_FLOAT>(Upper_Lefty.ToInt(pRuntime));
+    float pArray[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+    pArray[0] = static_cast<float>(Upper_Leftx.ToInt(pRuntime));
+    pArray[1] = static_cast<float>(Lower_Righty.ToInt(pRuntime));
+    pArray[2] = static_cast<float>(Lower_Rightx.ToInt(pRuntime));
+    pArray[3] = static_cast<float>(Upper_Lefty.ToInt(pRuntime));
 
     CFX_FloatRect crRect(pArray);
     if (m_bDelay) {
@@ -2485,7 +2485,7 @@
   CPDF_DefaultAppearance FieldAppearance = pFormControl->GetDefaultAppearance();
 
   CFX_ByteString csFontNameTag;
-  FX_FLOAT fFontSize;
+  float fFontSize;
   FieldAppearance.GetFont(csFontNameTag, fFontSize);
   vp << (int)fFontSize;
   return true;
diff --git a/fpdfsdk/javascript/color.cpp b/fpdfsdk/javascript/color.cpp
index b5ccbad..376eefa 100644
--- a/fpdfsdk/javascript/color.cpp
+++ b/fpdfsdk/javascript/color.cpp
@@ -121,13 +121,12 @@
   if (sSpace == "T") {
     *color = CPWL_Color(COLORTYPE_TRANSPARENT);
   } else if (sSpace == "G") {
-    *color = CPWL_Color(COLORTYPE_GRAY, (FX_FLOAT)d1);
+    *color = CPWL_Color(COLORTYPE_GRAY, (float)d1);
   } else if (sSpace == "RGB") {
-    *color =
-        CPWL_Color(COLORTYPE_RGB, (FX_FLOAT)d1, (FX_FLOAT)d2, (FX_FLOAT)d3);
+    *color = CPWL_Color(COLORTYPE_RGB, (float)d1, (float)d2, (float)d3);
   } else if (sSpace == "CMYK") {
-    *color = CPWL_Color(COLORTYPE_CMYK, (FX_FLOAT)d1, (FX_FLOAT)d2,
-                        (FX_FLOAT)d3, (FX_FLOAT)d4);
+    *color =
+        CPWL_Color(COLORTYPE_CMYK, (float)d1, (float)d2, (float)d3, (float)d4);
   }
 }
 
