#include<stdio.h>
#include<string.h>
int main()
{
char s[100] ="4.0800" ;
printf("float value : %4.8f\n" ,(float) atoll(s));
return 0;
}
出力は4.08000000
になるはずですが、4.00000000
しか取得できませんでした。
ドットの後に数字を取得する方法はありますか?
代わりにatof()
またはstrtof()
*を使用します。
printf("float value : %4.8f\n" ,atof(s));
printf("float value : %4.8f\n" ,strtof(s, NULL));
http://www.cplusplus.com/reference/clibrary/cstdlib/atof/
http://www.cplusplus.com/reference/cstdlib/strtof/
atoll()
は整数用です。atof()
/strtof()
はフロート用です。atoll()
で4.00
のみを取得する理由は、最初の非数字を検出すると解析を停止するためです。
* strtof()
にはC99またはC++ 11が必要であることに注意してください。
残念ながら、これを簡単に行う方法はありません。すべてのソリューションには欠点があります。
atof()
またはstrtof()
を直接使用します。これは、ほとんどの人が行うように指示するものであり、ほとんどの場合機能します。ただし、プログラムがロケールを設定するか、ロケールを設定するライブラリ(たとえば、ローカライズされたメニューを表示するグラフィックライブラリ)を使用し、ユーザーのロケールが小数点記号が.
ではない言語に設定されている場合(fr_FR
など、区切り記号が,
)これらの関数は、.
で解析を停止し、4.0
を取得します。
atof()
またはstrtof()
を使用しますが、ロケールを変更します。 setlocale(LC_ALL|~LC_NUMERIC, "");
または同類の呼び出しの前にatof()
を呼び出すだけです。 setlocale
の問題は、プロセスに対してグローバルであり、プログラムの残りの部分に干渉する可能性があることです。 setlocale()
を使用して現在のロケールを照会し、完了後に復元する場合があることに注意してください。
独自のフロート解析ルーチンを作成します。指数解析や16進浮動小数点数などの高度な機能が必要ない場合、これは非常に高速です。
また、値4.08
はfloatとして正確に表現できないことに注意してください。実際に取得する値は4.0799999237060546875
です。
成功すると、atof()関数は変換された浮動小数点数をdouble値として返します。有効な変換を実行できなかった場合、関数はゼロ(0.0)を返します。変換された値が表現可能な値の範囲外にdoubleである場合、undefined behavior。
参照: http://www.cplusplus.com/reference/cstdlib/atof/
このコードを試してください:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char s[100] = "4.0800";
printf("Float value : %4.8f\n",strtod(s,NULL));
return 0;
}
次の出力が得られます。
Float value : 4.08000000
atof()
を使用
しかし、これは非推奨です。代わりにこれを使用してください:
const char* flt = "4.0800";
float f;
sscanf(flt, "%f", &f);
http://www.cplusplus.com/reference/clibrary/cstdlib/atof/
atof()
は、失敗時と0
の変換時に0.0
を返します。使用しないのが最善です。
Sscanfを使用して、文字列を浮動小数点に変換できます。
#include<stdio.h>
#include<string.h>
int main()
{
char str[100] ="4.0800" ;
const char s[2] = "-";
char *token;
double x;
/* get the first token */
token = strtok(str, s);
sscanf(token,"%f",&x);
printf( " %f",x );
return 0;
}
Atof()関数を使用します。