#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
.
ドットの後に数字を取得する方法はありますか?
#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()
はフロート用です。あなただけが取得4.00
する理由atoll()
は、最初の非数字が見つかったときに解析を停止するためです。
* strtof()
C99 または C++11 が必要であることに注意してください。
残念ながら、これを簡単に行う方法はありません。すべてのソリューションには欠点があります。
使用atof()
またはstrtof()
直接: これはほとんどの人があなたに指示することであり、ほとんどの場合うまくいきます。ただし、プログラムがロケールを設定するか、ロケールを設定するライブラリ (たとえば、ローカライズされたメニューを表示するグラフィック ライブラリ) を使用し、ユーザーがロケールを小数点のない言語に設定している場合.
(たとえばfr_FR
、セパレータは,
) これらの関数は で解析を停止し、.
を取得し4.0
ます。
ロケールを使用するatof()
か変更します。などの呼び出しの前strtof()
に呼び出すことの問題です。問題は、それがプロセスに対してグローバルになり、プログラムの残りの部分に干渉する可能性があることです。現在のロケールを照会し、完了後に復元する場合があることに注意してください。setlocale(LC_ALL|~LC_NUMERIC, "");
atof()
setlocale
setlocale()
独自の float 解析ルーチンを記述します。指数解析や 16 進浮動小数点数などの高度な機能が必要ない場合、これは非常に高速です。
また、値4.08
を float として正確に表すことはできないことに注意してください。実際に得られる値は です4.0799999237060546875
。
使用する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 を使用すると、文字列を float に変換できます。
#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() 関数を使用します。
double x;
char *s;
s = " -2309.12E-15";
x = atof(s); /* x = -2309.12E-15 */
printf("x = %4.4f\n",x);