2

char を float に変換しようとすると、atof を使用していますが、値全体が返されません。これを修正する 方法は他にありますか?

この長さ(700.898)の値を指定すると、正しい値が返されます。3 つ以上の数字を指定すると、問題に直面するだけです。間違ったことを聞いていたらごめんなさい。

float flt = 71237.898;
char myfloat[50];
sprintf (myfloat, "%f", flt);  //myfloat = 71 237.8984380
float f = atof(myfloat); //f = 71.0000

スペースを削除するには:

int myfllen = strlen(myfloat);
    for(int b=0;b<strlen(myfloat);b++)
        {
        if(myfloat[b] == ' ')
            {
            int c = b;
            while(c<=myfllen)
                {
                myfloat[c] = myfloat[c+1]; 
                c++;
                }
            }
        }
4

2 に答える 2

4

コメントに投稿したように、と71の間に本当にそのスペースがありますか? もしそうなら、これが. 実際に(常に よりもはるかに優れたアイデア)に切り替えて、解析を停止させた文字位置を提供するように依頼することができます。237sprintfatof71strtodatof

どうやらあなたのロケール設定ではsprintf、スペースを桁グループの区切り記号として使用しています。一方atof、ロケールに対応していません。atof言語仕様では、 ( strtod) がロケール以外のロケールのロケール固有の数値形式を認識する必要はありません"C"

setlocale(LC_ALL, "C")前に行うsprintfと、うまくいけばそのスペースが取り除かれます。または、これらのスペースを手動で一掃します。

于 2012-08-10T04:57:08.447 に答える
0

私はあなたのコードを使用して小さなプログラムを作成しました

#include<stdio.h>
#include<stdlib.h>
int main()
{
double flt = 71237.898;
char myfloat[50];
sprintf (myfloat, "%f", flt);  
double f = atof(myfloat); 
printf("answer is %f",f);
return 0;
}

の出力を与える

answer is 71237.898000

http://codepad.org/GMWScwqKを参照してください

float を戻り値として使用するために問題が発生すると思います....しかし、実際には atof は double 値を返します...

于 2012-08-10T05:06:58.777 に答える