c-如何将两个整数进行除法运算,得到一个十进制数的结果



我正在Contiki中对Zolertia模块进行一个项目,在该模块中我需要计算野火发生的风险。

为了计算这种风险,使用的公式是Risk = Temperature / Humidity
风险的结果是一个十进制值,有5个不同的值范围可对此风险进行分类:0-0.49 , 0.5-0.99, 1-1.49, 1.5-1.99, >=2

我的问题是我不能得到十进制的结果。当我在终端中运行它时,它显示温度值和湿度值,但风险值中只有一个空白。

我的代码是:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "contiki.h"
#include <float.h>
PROCESS(temp_hum_fog, "Wildfire Control");
AUTOSTART_PROCESSES(&temp_hum_fog);
static struct etimer et;
PROCESS_THREAD(temp_hum_fog, ev, data)
{

int16_t temp, hum;
float risk;
PROCESS_BEGIN()

while(1) {
etimer_set(&et, CLOCK_SECOND);
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
temp = rand() % 45;
hum = rand() % (85-5)+5;
risk = (float)temp/(float)hum;
printf("Temperature:%d ºCnHumidity:%d HRnRisk:%fn", temp,hum,risk);
}
PROCESS_END();

}

如果我将temphum的类型更改为float,它也不会显示任何结果,所以我不确定float是否在Contiki中工作。

有人知道解决方案吗?

您使用的C实现不是完整的标准C实现,并且不支持printf中的浮点转换。三种选择是:

  • 查看C实现的文档,看看是否可以启用对浮点的支持
  • 找到另一个要使用的C实现(特别是标准的C库(
  • 使用整数算术进行计算,如下例所示

此代码将只使用整数算术将商打印到小数点后两位,四舍五入:

int integer  = temp/hum;
int fraction = temp%hum * 100 / hum;
printf("Risk: %d.%02dn", integer, fraction);

请注意,这假设所涉及的值为正;负数可能导致不希望的输出。

我有几个建议:

  1. 指定带有尾随"f"的文字或在

temp = rand() % 45; hum = rand() % (85-5)+5;

  1. 将temp和hum声明为float,然后强制转换rand((的结果

最新更新