1

Arduino または C で、たとえば 30.8365146 を 2 つの整数 (30 と 8365146) に変換する方法。

この問題は、分数の送信を許可しない xbee シリーズ 1 経由で GPS データを送信しようとすると直面するので、データを 2 つの部分に分割することにしました。これどうやってするの?

  double num=30.233;
  int a,b;
  a = floor(num); 
  b= (num-a) * pow(10,3);

出力: 30 と 232 !!! 出力が 30 と 233 ではない理由と修正方法

  double num=30.2334567;
  int a,b;
  a = floor(num); 
  b= (num-a) * pow(10,7);

出力: 30 と 32767 !!!

4

3 に答える 3

0

他の回答で示唆されているように、この問題には丸め誤差が含まれる可能性があるため、最初に浮動小数点値の乗算を実行してから、減算することをお勧めします。たとえば、このコードはあなたが探している出力を生成しました:

int main() {
    double num = 30.233;
    int a,b;
    a = floor(num);
    b = num * pow(10,3) - a * pow(10,3);
    printf("%d",b);

    num = 30.2334567;
    a = floor(num);
    b = num * pow(10,7) - a * pow(10,7);
    printf("%d", b);

    return 0;
}  

出力:233および2334567

于 2013-03-13T19:21:39.210 に答える
0

あなたが直面しているのは、倍精度の問題のようです。変数に書き込んでいる数値は表現できないため、コンパイラは最も近い数値を採用します。

あなたのアルゴリズムは正しいです。

于 2013-03-13T19:00:49.053 に答える