因此,我正在使用Atmega328p和MCP9808来获取一些i2c临时值。我正在将其运行到我的计算机上,并通过USART在终端中查看它。
我得到了正确的摄氏温度值(显示00022,大约是71度,这对我的房间是正确的)。
但是,当我尝试转换为华氏度时,得到的值为00054,即def。不正确。
这是我使用的公式:
In [551]: df.columns = pd.MultiIndex.from_arrays([df.columns, df.columns.to_series().groupby(df.columns).cumcount().astype(str)]).map('_'.join)
In [552]: df
Out[552]:
id_0 name_0 id_1
0 1 4 9
1 2 3 0
2 3 2 1
摄氏温度只是主程序中一个称为“温度”的float fahrenheitConvert(uint16_t celsius) {
float fahrenheit;
fahrenheit = celsius*(9/5) + 32;
return fahrenheit;
}
值(通过串行输出就可以了)。我想念什么吗?看来应该是简单的转换?
答案 0 :(得分:2)
9/5
作为截断整数数学执行,其结果为1
(因为9/5
丢弃小数部分为1
)。因此,您的计算将简化为:
fahrenheit = celsius * (1) + 32;
或者只是:
fahrenheit = celsius + 32;
这显然没有帮助。
要解决此问题,请将其中一个文字更改为double
文字,以便数学自然转换为double
数学:
fahrenheit = celsius * 9 / 5.0 + 32;
现在,您可以使用整数数学来计算celsius * 9
,然后在除以double
时隐式强制5.0
,并保留计算的小数部分。
旁注:实际上,您实际上不需要将此代码分成声明,赋值和return
。该函数的主体可以简化为:
return celsius * 9 / 5.0 + 32;
它会同样有效。