如何将两个整数相除并得到小数的结果?
how to divide two intengers and get a result with decimal numbers?
我正在 Contiki 中做一个 Zolertia 模块的项目,我需要在其中计算发生野火的风险。
要计算此风险,使用的公式是 Risk = Temperature / Humidity
。
Risk 的结果是一个十进制值,有 5 个不同的值范围来对该 Risk 进行分类:0-0.49 , 0.5-0.99, 1-1.49, 1.5-1.99, >=2
.
我的问题是无法获得小数结果。当我 运行 它在终端中显示温度值和湿度值时,但在风险值中只有一个空白 space。
我的代码是:
#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
是否适用康提基
有人知道解决办法吗?
我有几点建议:
- 用尾部 'f' 或在
中添加小数位来指定文字
temp = rand() % 45; hum = rand() % (85-5)+5;
- 将 temp 和 hum 声明为浮点数,然后转换 rand() 的结果
您使用的 C 实现不是完整的标准 C 实现,不支持 printf
中的浮点转换。三个选项是:
- 查看 C 实现的文档,看看是否可以启用浮点支持。
- 寻找另一个 C 实现来使用(特别是标准 C 库)。
- 使用整数运算,如下例所示,进行计算。
此代码将仅使用整数运算将商打印到小数点后两位,四舍五入:
int integer = temp/hum;
int fraction = temp%hum * 100 / hum;
printf("Risk: %d.%02d\n", integer, fraction);
请注意,这里假设所涉及的值为正;负数可能会导致不需要的输出。
我正在 Contiki 中做一个 Zolertia 模块的项目,我需要在其中计算发生野火的风险。
要计算此风险,使用的公式是 Risk = Temperature / Humidity
。
Risk 的结果是一个十进制值,有 5 个不同的值范围来对该 Risk 进行分类:0-0.49 , 0.5-0.99, 1-1.49, 1.5-1.99, >=2
.
我的问题是无法获得小数结果。当我 运行 它在终端中显示温度值和湿度值时,但在风险值中只有一个空白 space。
我的代码是:
#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
是否适用康提基
有人知道解决办法吗?
我有几点建议:
- 用尾部 'f' 或在 中添加小数位来指定文字
temp = rand() % 45; hum = rand() % (85-5)+5;
- 将 temp 和 hum 声明为浮点数,然后转换 rand() 的结果
您使用的 C 实现不是完整的标准 C 实现,不支持 printf
中的浮点转换。三个选项是:
- 查看 C 实现的文档,看看是否可以启用浮点支持。
- 寻找另一个 C 实现来使用(特别是标准 C 库)。
- 使用整数运算,如下例所示,进行计算。
此代码将仅使用整数运算将商打印到小数点后两位,四舍五入:
int integer = temp/hum;
int fraction = temp%hum * 100 / hum;
printf("Risk: %d.%02d\n", integer, fraction);
请注意,这里假设所涉及的值为正;负数可能会导致不需要的输出。