浮点精度C-将参数传递到Xively
我已经做了一个温度传感器函数,它返回一个浮点数,后面是6位数字。(例:28.500000) 使用:浮点精度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 ); 如何将温度值浮点值转换为一个
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个小数点,它似乎不在选项中。