如何解决如何将两个整数相除并得到十进制数的结果?
我正在 Contiki 中为 Zolertia 模块做一个项目,我需要在其中计算发生野火的风险。
为了计算这个风险,使用的公式是Risk = Temperature / Humidity
。
Risk 的结果是一个十进制值,有 5 个不同的值范围可以对这个 Risk 进行分类: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 ºC\nHumidity:%d HR\nRisk:%f\n",temp,hum,risk);
}
PROCESS_END();
}
如果我将 temp
和 hum
的类型更改为 float
,它也不会显示任何结果,因此我不确定 float
在 Contiki 中是否有效。
有人知道任何解决方案吗?
解决方法
您使用的 C 实现不是完整的标准 C 实现,并且不支持 printf
中的浮点转换。三个选项是:
- 查看 C 实现的文档,看看是否可以启用对浮点的支持。
- 找到另一个要使用的 C 实现(尤其是标准 C 库)。
- 使用整数算术(如下例所示)进行计算。
此代码会将商打印到小数点后两位,四舍五入,仅使用整数运算:
int integer = temp/hum;
int fraction = temp%hum * 100 / hum;
printf("Risk: %d.%02d\n",integer,fraction);
注意这里假设所涉及的值为正;负数可能会导致不希望的输出。
,我有几点建议:
- 使用尾随 'f' 或在其中添加小数位指定文字
<full-calendar
@click.prevent=""
:options="calendarOptions"
ref="calendar"
@mouseover="getCalendarTimestamp"
></full-calendar>
getCalendarTimestamp(e) {
if (e.srcElement.attributes[1] && e.srcElement.attributes[1] != undefined
) {
console.log(e.srcElement.attributes[1].value);
} else {
console.log("not a date value");
}
}
- 将 temp 和 hum 声明为浮点数,然后转换 rand() 的结果
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。