带小数的值在C程序中被舍入

带小数的值在C程序中被舍入,c,C,我用C语言写了一个程序,它有广播发送和广播接收功能。该函数实际上位于两个不同的文件中,其中发送方将发送一条包含小数点的值的消息,接收方将接收该值并在屏幕上显示之前执行某种类型的计算。值和小数位将作为消息(char)发送,并在另一端作为消息接收。当我试图将消息从char转换为float甚至double时,值被舍入,没有小数点。请查看以下代码摘录: 广播\u发送: static uint16_t value = 0; char temp_value [6]; static struct etim

我用C语言写了一个程序,它有广播发送和广播接收功能。该函数实际上位于两个不同的文件中,其中发送方将发送一条包含小数点的值的消息,接收方将接收该值并在屏幕上显示之前执行某种类型的计算。值和小数位将作为消息(char)发送,并在另一端作为消息接收。当我试图将消息从char转换为float甚至double时,值被舍入,没有小数点。请查看以下代码摘录:

广播\u发送:

static uint16_t value = 0;

char temp_value [6];

static struct etimer et;

value = 27.34;

sprintf(temp_value, value); // converting the uint_16t to char

packetbuf_copyfrom(temp_value, 6);

broadcast_send(&broadcast);

printf("This is a test = %s C\n", temp_value); // temp_value contains the value with decimal place
广播\u接收

static uint16_t value_temp;

static uint16_t avg = 0;

static uint16_t sum = 0;

static int x = 0;

Static void broadcast_recv(struct broadcast_conn *c, const linkaddr_t *from) {

           value_temp = atof (packetbuf_dataptr());
           printf("Temperature = %u C\n", value_temp);
    }
}
结果:

我得到了
温度=27℃
。而我的期望值应该是27.34

请帮我解决这个问题

致以最良好的祝愿


有两个问题

如上所述,uint16_t是一个整数,没有小数位数。您需要一个浮点数,或者将温度存储为2734之类的整数倍,然后将其除以100

其次,获取要输出到的字符串、格式和要填充的值。您正在传递输出字符串,但没有传递格式。它使用值作为格式

这是正确的用法

double value = 27.34;
sprintf(temp_value, "%.2f", value)
小心。值1234.56将溢出temp_值
snprintf
将对此进行保护

snprintf(temp_value, sizeof(temp_value), "%.2f", value);

static uint16\u t value\u temp这将
值\u temp
定义为整数。整数没有小数。我试过浮点值,甚至双精度值。当我尝试此操作时,我没有看到收到的消息(值)。我得到以下结果:Temperature=CNo一个人可以猜测你尝试了什么或者失败的原因,除非你回答这个问题并发布代码。请参阅。阅读和使用C11标准。从上的现有代码中获取灵感。还请阅读C编译器(例如…)和调试器(例如…)的文档。使用所有警告和调试信息编译代码,如
gcc-Wall-Wextra-g
Hello Schwern,\@AzharHossen Hello.Hello Schwern,感谢您发现错误。实际上,我从温度传感器中获取原始值,并将值存储在单位_16t中。然后我将其转换为如下所示,并将其存储在字符中以便传输:sprintf(temp_值,“%d.%02d”,value/100,value%100);我已经用printf进行了检查,广播中的temp_值包含小数点。它是在广播上,但接收失败。我尝试将其转换回float/double,但没有看到收到的值。如果我把unit16而不是float或double,我会看到数字四舍五入。广播接收也有相同的
static uint16\u t value\u temp
尝试将其更改为
float
double
并使用
%f
%lf