如何将两个整数相除并得到小数的结果?

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();


}

如果我将 temphum 的类型更改为 float,它也不会显示任何结果,所以我不确定 float 是否适用康提基

有人知道解决办法吗?

我有几点建议:

  1. 用尾部 'f' 或在
  2. 中添加小数位来指定文字

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

  1. 将 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);

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