59
#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.

ドットの後に数字を取得する方法はありますか?

4

8 に答える 8

67

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 が必要であることに注意してください。

于 2011-10-31T07:43:53.390 に答える
32

残念ながら、これを簡単に行う方法はありません。すべてのソリューションには欠点があります。

  1. 使用atof()またはstrtof()直接: これはほとんどの人があなたに指示することであり、ほとんどの場合うまくいきます。ただし、プログラムがロケールを設定するか、ロケールを設定するライブラリ (たとえば、ローカライズされたメニューを表示するグラフィック ライブラリ) を使用し、ユーザーがロケールを小数点のない言語に設定している場合.(たとえばfr_FR、セパレータは,) これらの関数は で解析を停止し、.を取得し4.0ます。

  2. ロケールを使用するatof()か変更します。などの呼び出しの前strtof()に呼び出すことの問題です。問題は、それがプロセスに対してグローバルになり、プログラムの残りの部分に干渉する可能性があることです。現在のロケールを照会し、完了後に復元する場合があることに注意してください。setlocale(LC_ALL|~LC_NUMERIC, "");atof()setlocalesetlocale()

  3. 独自の float 解析ルーチンを記述します。指数解析や 16 進浮動小数点数などの高度な機能が必要ない場合、これは非常に高速です。

また、値4.08を float として正確に表すことはできないことに注意してください。実際に得られる値は です4.0799999237060546875

于 2011-10-31T07:57:56.897 に答える
4

使用するatof()

ただし、これは非推奨です。代わりにこれを使用してください。

const char* flt = "4.0800";
float f;
sscanf(flt, "%f", &f);

http://www.cplusplus.com/reference/clibrary/cstdlib/atof/

atof()0は、失敗と の変換の両方で返されます0.0。使用しないことをお勧めします。

于 2011-10-31T07:45:43.970 に答える
1

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; 
}
于 2017-01-05T05:05:53.167 に答える
0

atof() 関数を使用します。

http://www.cplusplus.com/reference/clibrary/cstdlib/atof/

于 2011-10-31T07:44:16.790 に答える
-1
double x;

char *s;

s = " -2309.12E-15";

x = atof(s);     /* x = -2309.12E-15 */

printf("x = %4.4f\n",x);
于 2013-05-28T21:48:15.540 に答える