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