diff --git a/Common/Core/vtkMath.h b/Common/Core/vtkMath.h
index ea267a6470e5462ad773b465fe6b6dd42dde7b41..7de38c70c1f128e4c58cff6f4622dc89023cf4cd 100644
--- a/Common/Core/vtkMath.h
+++ b/Common/Core/vtkMath.h
@@ -1603,10 +1603,15 @@ namespace vtk_detail
 template <typename OutT>
 void RoundDoubleToIntegralIfNecessary(double val, OutT* ret)
 { // OutT is integral -- clamp and round
-  double min = static_cast<double>(vtkTypeTraits<OutT>::Min());
-  double max = static_cast<double>(vtkTypeTraits<OutT>::Max());
-  val = vtkMath::ClampValue(val, min, max);
-  *ret = static_cast<OutT>((val >= 0.0) ? (val + 0.5) : (val - 0.5));
+  if (!vtkMath::IsNan(val))
+  {
+    double min = static_cast<double>(vtkTypeTraits<OutT>::Min());
+    double max = static_cast<double>(vtkTypeTraits<OutT>::Max());
+    val = vtkMath::ClampValue(val, min, max);
+    *ret = static_cast<OutT>((val >= 0.0) ? (val + 0.5) : (val - 0.5));
+  }
+  else
+    *ret = 0;
 }
 template <>
 inline void RoundDoubleToIntegralIfNecessary(double val, double* retVal)
@@ -1616,10 +1621,15 @@ inline void RoundDoubleToIntegralIfNecessary(double val, double* retVal)
 template <>
 inline void RoundDoubleToIntegralIfNecessary(double val, float* retVal)
 { // OutT is float -- just clamp (as doubles, then the cast to float is well-defined.)
-  double min = static_cast<double>(vtkTypeTraits<float>::Min());
-  double max = static_cast<double>(vtkTypeTraits<float>::Max());
-  val = vtkMath::ClampValue(val, min, max);
-  *retVal = static_cast<float>(val);
+  if (!vtkMath::IsNan(val))
+  {
+    double min = static_cast<double>(vtkTypeTraits<float>::Min());
+    double max = static_cast<double>(vtkTypeTraits<float>::Max());
+    val = vtkMath::ClampValue(val, min, max);
+    *retVal = static_cast<float>(val);
+  }
+  else
+    *retVal = val;
 }
 } // end namespace vtk_detail