FWIW, I just struggled through a rounding-based issue so I thought I’d post it here.
I was trying to do a linear interpolation for setting my thermostat temperature based on a few different factors. However, I ultimately wanted to set it to a whole number, not a decimal, hence the rounding. Here’s what I ended up with:
var Number defaultSetPoint = SetPoint_F.state
var Number setPoint = AwaySetPoint_F.state
var Number outdoorTemp = OutdoorTemperature_F.state
var Number heatPumpCutoffHigh = 40
var Number heatPumpCutoffLow = 28
var multiplier = (heatPumpCutoffHigh - outdoorTemp) / (heatPumpCutoffHigh - heatPumpCutoffLow)
// this ends up being type BigDecimal
var setPointDec = sleepSetPoint + multiplier * (defaultSetPoint - sleepSetPoint)
setPoint = Math::round(setPointDec.floatValue())
sendCommand(Nest_temp_setpoint_f, setPoint)