在整数固件版本中,十进制数字(tL)的四舍五入不为10(tH)。
我想在温度转换中使用固定格式(包括符号),因此该值可以为+23.8或-23.8。分析代码时,我意识到当舍入部分达到10时,小数部分的舍入不会添加到单位中。 因此,如果要转换的值为199999,则四舍五入后的转换为19.10,应为20.0
这是原始代码
local sgn = t<0 and -1 or 1
local tA = sgn*t
local tH=tA/10000
local tL=(tA%10000)/1000 + ((tA%1000)/100 >= 5 and 1 or 0)
if tH and (t~=850000) then
temp[addr]=(sgn<0 and "-" or "")..tH.."."..tL
debugPrint(to_string(addr),(sgn<0 and "-" or "")..tH.."."..tL)
status[i] = 2
end
此代码解决了问题
local sign = t<0 and -1 or 1
local tA = sgn*t
local tH=tA/10000
local tL=(tA%10000)/1000 + ((tA%1000)/100 >= 5 and 1 or 0)
if tL==10 then
tH = tH+1
tL = 0
end
if tH and (t~=850000) then
temp[addr]=(sgn<0 and "-" or "")..tH.."."..tL
debugPrint(to_string(addr),(sgn<0 and "-" or "")..tH.."."..tL)
status[i] = 2
end
if t= -199999, with the original code
tH = 19
tL =10
temp = -19.10
包括更正
tH = 20
tL = 0
temp = -20.0
我还对数字格式进行了更改,因此位数始终是相同的,为了便于在接收函数中进行处理,因此将5.6转换为+05.6,我认为更好,但这是一个个人选择。