0

の後に6桁の浮動小数点数を返す温度センサー関数を作成しました。(例: 28.500000)

使用:

float fTemp;
...
printf("Temp =  %.1f", fTemp);

温度の小数を 1 に制限することができ、すべて問題ありません。(例; 28.5)

ここで、テンペレを Xively アカウントに渡したいと思います。次の機能があります。

extern xi_datapoint_t* xi_set_value_f32( xi_datapoint_t* dp, float v );

温度値の浮動小数点数を 10 進数に変換して xi_set_value_f32 に渡すにはどうすればよいですか?

ありがとうございます。

4

2 に答える 2

2

これを行う

int tempNumber;

tempNumber = fTemp*10;

Now do this 

fTemp = (float)(tempNumber/10.0);

ここで行ったことは、浮動小数点数を 10 に乗算して整数に保存することです。このようにして、浮動小数点の最初の 10 進数を整数に保持したため、ポイント以降のすべての値は無視されます。

次に私がしたことは、一時整数を 10.0 で割って結果を型キャストし、fTemp変数に保存し直すことです

于 2013-07-28T12:07:04.693 に答える
1

math.h の標準 C 関数 round/roundf で実行できます。

#include <math.h>    

// ...

fTemp = roundf( fTemp * 10.0f ) / 10.0f;

繰り返しますが、なぜこれをやりたいのですか?精度を維持し、出力時に丸めるだけの方が良いようです。

于 2013-07-28T12:33:10.800 に答える