Thanks for all the help Gene, sorry it took so long to get back to this.
${t_value.getClass().getName()}
Returned BigDecimal for me. Was able to cast to a double while setting
<core:set var="t_value" value="${row.get(var_column).doubleValue()}" />
That looked like it fixed it until I got to this combination
0.8 * 7.0 = 5.6000000000000005
I tried with float instead of double, same result. Also set t_value to intValue since it will always be an int anyway, no change.
Edit: Scratch that, upon further review it looks like it wasn't ALWAYS being cast to a BigDecimal to begin with. By forcing that conversion, leaving them as BigDecimal, and using its multiply function, this appears to be working now:
<core:new className="java.math.BigDecimal" var="t_value">
<core:arg type="java.lang.String" value="${row.get(var_column).toString() }" />
</core:new>
<core:new className="java.math.BigDecimal" var="t_weight">
<core:arg type="java.lang.String" value="${m_weights.get(gm_weights_mapping.get(var_column)).toString() }" />
</core:new>
<gel:log level="INFO" category="ALIGN" var="include_log">Value ${t_column} [${t_weight_map}]: ${t_weight} * ${t_value} = ${t_value.multiply(t_weight)}</gel:log>