diff --git a/include/PwmSensor.hpp b/include/PwmSensor.hpp
index 69a35c4..1f8a467 100644
--- a/include/PwmSensor.hpp
+++ b/include/PwmSensor.hpp
@@ -22,7 +22,7 @@
     std::shared_ptr<sdbusplus::asio::dbus_interface> sensorInterface;
     std::shared_ptr<sdbusplus::asio::dbus_interface> controlInterface;
     std::shared_ptr<sdbusplus::asio::dbus_interface> association;
-    size_t pwmMax;
+    double pwmMax;
     void setValue(uint32_t value);
     uint32_t getValue(bool errThrow = true);
 };
diff --git a/src/PwmSensor.cpp b/src/PwmSensor.cpp
index 4824489..8993f2b 100644
--- a/src/PwmSensor.cpp
+++ b/src/PwmSensor.cpp
@@ -24,10 +24,10 @@
 #include <stdexcept>
 #include <string>
 
-static constexpr size_t sysPwmMax = 255;
-static constexpr size_t psuPwmMax = 100;
+static constexpr double sysPwmMax = 255.0;
+static constexpr double psuPwmMax = 100.0;
 static constexpr double defaultPwm = 30.0;
-static constexpr size_t targetIfaceMax = 255;
+static constexpr double targetIfaceMax = sysPwmMax;
 
 PwmSensor::PwmSensor(const std::string& name, const std::string& sysPath,
                      std::shared_ptr<sdbusplus::asio::connection>& conn,
@@ -55,24 +55,36 @@
     if (!pwmValue)
     {
         // default pwm to non 0
-        pwmValue = static_cast<uint32_t>(pwmMax * (defaultPwm / 100));
+        pwmValue = static_cast<uint32_t>(pwmMax * (defaultPwm / 100.0));
         setValue(pwmValue);
     }
     double fValue = 100.0 * (static_cast<double>(pwmValue) / pwmMax);
     sensorInterface->register_property(
         "Value", fValue,
         [this](const double& req, double& resp) {
-            if (req > 100 || req < 0)
+            if (!std::isfinite(req))
             {
+                // Reject attempted change, if to NaN or other non-numeric
+                return -1;
+            }
+            if (req > 100.0 || req < 0.0)
+            {
+                // TODO(): It does not seem desirable to halt daemon here,
+                // probably should just reject the change, continue running?
                 throw std::runtime_error("Value out of range");
                 return -1;
             }
-            if (req == resp)
+
+            double reqValue = (req / 100.0) * pwmMax;
+            double respValue = (resp / 100.0) * pwmMax;
+            auto reqInt = static_cast<uint32_t>(std::round(reqValue));
+            auto respInt = static_cast<uint32_t>(std::round(respValue));
+            // Avoid floating-point equality, compare as integers
+            if (reqInt == respInt)
             {
                 return 1;
             }
-            double value = (req / 100) * pwmMax;
-            setValue(static_cast<int>(value));
+            setValue(reqInt);
             resp = req;
 
             controlInterface->signal_property("Target");
@@ -80,14 +92,18 @@
             return 1;
         },
         [this](double& curVal) {
-            double value = 100.0 * (static_cast<double>(getValue()) / pwmMax);
-            if (curVal != value)
+            double currScaled = (curVal / 100.0) * pwmMax;
+            auto currInt = static_cast<uint32_t>(std::round(currScaled));
+            auto getInt = getValue();
+            // Avoid floating-point equality, compare as integers
+            if (currInt != getInt)
             {
-                curVal = value;
+                double getScaled =
+                    100.0 * (static_cast<double>(getInt) / pwmMax);
+                curVal = getScaled;
                 controlInterface->signal_property("Target");
                 sensorInterface->signal_property("Value");
             }
-
             return curVal;
         });
     // pwm sensor interface is in percent
@@ -100,7 +116,7 @@
     controlInterface->register_property(
         "Target", static_cast<uint64_t>(pwmValue),
         [this](const uint64_t& req, uint64_t& resp) {
-            if (req > targetIfaceMax)
+            if (req > static_cast<uint64_t>(targetIfaceMax))
             {
                 throw std::runtime_error("Value out of range");
                 return -1;
@@ -109,8 +125,9 @@
             {
                 return 1;
             }
-            setValue(
-                std::round(pwmMax * static_cast<double>(req) / targetIfaceMax));
+            auto scaledValue = static_cast<double>(req) / targetIfaceMax;
+            auto roundValue = std::round(scaledValue * pwmMax);
+            setValue(static_cast<uint32_t>(roundValue));
             resp = req;
 
             sensorInterface->signal_property("Value");
@@ -118,16 +135,16 @@
             return 1;
         },
         [this](uint64_t& curVal) {
-            uint64_t value = getValue();
-            value = static_cast<uint64_t>(std::round(
-                (static_cast<double>(value) / pwmMax) * targetIfaceMax));
+            auto getInt = getValue();
+            auto scaledValue = static_cast<double>(getInt) / pwmMax;
+            auto roundValue = std::round(scaledValue * targetIfaceMax);
+            auto value = static_cast<uint64_t>(roundValue);
             if (curVal != value)
             {
                 curVal = value;
                 controlInterface->signal_property("Target");
                 sensorInterface->signal_property("Value");
             }
-
             return curVal;
         });
     sensorInterface->initialize();
