浮点精度C-将参数传递到Xively

浮点精度C-将参数传递到Xively,c,floating-point,xively,C,Floating Point,Xively,我已经做了一个温度传感器函数,它返回一个浮点数,后面是6位数字。(例:28.500000) 使用: float fTemp; ... printf("Temp = %.1f", fTemp); 我可以把温度小数点限制在一,一切都很好。(例如:28.5) 现在,我想将Temple传递到我的Xively帐户,我有以下功能: extern xi_datapoint_t* xi_set_value_f32( xi_datapoint_t* dp, float v ); 如何将温度值浮点值转换为一个

我已经做了一个温度传感器函数,它返回一个浮点数,后面是6位数字。(例:28.500000)

使用:

float fTemp;
...
printf("Temp =  %.1f", fTemp);
我可以把温度小数点限制在一,一切都很好。(例如:28.5)

现在,我想将Temple传递到我的Xively帐户,我有以下功能:

extern xi_datapoint_t* xi_set_value_f32( xi_datapoint_t* dp, float v );
如何将温度值浮点值转换为一个小数,并将其传递给xi_set_value_f32

谢谢,, dk

这样做

int tempNumber;

tempNumber = fTemp*10;

Now do this 

fTemp = (float)(tempNumber/10.0);
我在这里所做的是将浮点数乘以10并保存为整数,这样我将浮点数的第一个十进制数保留为整数,因此忽略点后的所有值

接下来,我要做的是将临时整数除以10.0,然后键入结果并保存回
fTemp
变量

int tempNumber;

tempNumber = fTemp*10;

Now do this 

fTemp = (float)(tempNumber/10.0);
我在这里所做的是将浮点数乘以10并保存为整数,这样我将浮点数的第一个十进制数保留为整数,因此忽略点后的所有值


接下来我要做的是将临时整数除以10.0,键入结果并保存回
fTemp
变量数学中的标准C函数round/roundf。h应该这样做

#include <math.h>    

// ...

fTemp = roundf( fTemp * 10.0f ) / 10.0f;
#包括
// ...
fTemp=整周(fTemp*10.0f)/10.0f;

再说一遍,你为什么要这样做?保持精度并在输出时将其四舍五入听起来更好。

数学中的标准C函数四舍五入/roundf。h应该这样做

#include <math.h>    

// ...

fTemp = roundf( fTemp * 10.0f ) / 10.0f;
#包括
// ...
fTemp=整周(fTemp*10.0f)/10.0f;

再说一遍,你为什么要这样做?保持精度并在输出时将其四舍五入听起来更好。

由于浮点数的性质,这是不可能做到的,不仅如此,它完全没有意义。不可能,因为浮点指针不精确(这意味着,对于某些值,除法可能会非常接近预期结果,但不会精确-例如,16.0/10.0可能会给出1.599999)毫无意义,因为它是一个显示问题,应该在显示时解决,而不是在存储时。由于浮点数的性质,这是不可能做到的,不仅如此,它完全没有意义。不可能,因为浮点指针是不精确的(这意味着,对于某些值,除法可能会非常接近预期结果,但不会精确-例如,16.0/10.0可能会给出1.599999)毫无意义,因为这是一个显示问题,应该在显示时解决,而不是在存储时解决。您可能希望使用
舍入
舍入到最近值。@ouah yes,这确实更好:)将经常按预期工作,但并不总是由于fp的工作方式,请阅读。您可能希望使用
舍入
舍入到最近的位置。@ouah是的,这确实更好:)将经常按预期工作,但并不总是由于fp的工作方式,请阅读。谢谢您的回答。事实上,我不能在xively上只显示1位小数,它似乎不在选项中。谢谢你的回答。实际上,我不能在xively上只显示1个小数点,它似乎不在选项中。