strtod、_strtod_l、wcstod、_wcstod_l
更新 : 2007 年 11 月
文字列を倍精度の値に変換します。
double strtod(
const char *nptr,
char **endptr
);
double _strtod_l(
const char *nptr,
char **endptr,
_locale_t locale
);
double wcstod(
const wchar_t *nptr,
wchar_t **endptr
);
double wcstod_l(
const wchar_t *nptr,
wchar_t **endptr,
_locale_t locale
);
パラメータ
nptr
NULL で終わる変換対象の文字列。endptr
スキャンの終了位置を示す文字へのポインタ。locale
使用するロケール。
戻り値
strtod 関数は、オーバーフローを引き起こす場合を除き、浮動小数点数の値を返します。オーバーフローの場合は、+HUGE_VAL または –HUGE_VAL を返します。HUGE_VAL の符号は、表現できない値の符号と一致します。変換を実行できない場合、またはアンダーフローが発生する場合、strtod 関数は 0 を返します。
wcstod 関数の戻り値は、strtod 関数の戻り値と同じです。「パラメータの検証」に説明されているように、両方の関数に対して、オーバーフローまたはアンダーフローが発生し、無効なパラメータ ハンドラが呼び出された場合、errno は ERANGE に設定されます。
戻り値の詳細については、「_doserrno、errno、_sys_errlist、および _sys_nerr」を参照してください。
解説
各関数は、入力文字列 nptr を double に変換します。strtod 関数は、nptr を倍精度の値に変換します。strtod は、数値の一部として認識できない文字を最初に見つけた時点で、文字列 nptr の読み取りを終了します。数値として認識できない最初の文字が、終端の null 文字の場合もあります。wcstod 関数は、strtod 関数のワイド文字バージョンです。関数の引数 nptr はワイド文字列です。それ以外では、これらの関数の動作は同じです。
汎用テキスト ルーチンのマップ
TCHAR.H のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_tcstod |
strtod |
strtod |
wcstod |
_tcstod_l |
_strtod_l |
_strtod_l |
_wcstod_l |
現在のロケールの LC_NUMERIC カテゴリの設定に基づいて、nptr の小数点文字が認識されます。詳細については、「setlocale」を参照してください。_l サフィックスが付いていない関数は、現在のロケールを使用します。_strtod_l は、渡されたロケールを使用することを除いて _strtod_l と同じです。詳細については、「ロケール」を参照してください。
endptr が NULL 以外の場合は、スキャンを停止させた文字へのポインタを endptr が指す位置に格納します。変換できなかった場合 (有効な数字が見つからなかった場合、または無効な base を指定した場合) は、nptr の値を endptr が指す位置に格納します。
strtod は、nptr が次の形式の文字列を指すものと想定します。
[whitespace] [sign] [digits] [.digits] [ {d | D | e | E}[sign]digits]
whitespace はスペースやタブで構成され、無視されます。sign はプラス (+) またはマイナス (–) のいずれかで、digits は 1 つ以上の 10 進数字です。小数点文字の前に数字がない場合は、少なくとも 1 つの数字が小数点文字の後に必要です。10 進数の後には指数部を指定できます。指数部は、指数部の開始文字 (d、D、e、または E) および必要に応じて符号付き整数で構成されます。指数部と小数点文字のいずれも指定されない場合は、文字列の最後の数字の後に小数点文字が続くと想定されます。この形式に一致しない文字を見つけるとスキャンを停止します。
必要条件
ルーチン |
必須ヘッダー |
---|---|
strtod, _strtod_l |
<stdlib.h> |
wcstod, _wcstod_l |
<stdlib.h> または <wchar.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// crt_strtod.c
// This program uses strtod to convert a
// string to a double-precision value; strtol to
// convert a string to long integer values; and strtoul
// to convert a string to unsigned long-integer values.
//
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
char *string, *stopstring;
double x;
long l;
int base;
unsigned long ul;
string = "3.1415926This stopped it";
x = strtod( string, &stopstring );
printf( "string = %s\n", string );
printf(" strtod = %f\n", x );
printf(" Stopped scan at: %s\n\n", stopstring );
string = "-10110134932This stopped it";
l = strtol( string, &stopstring, 10 );
printf( "string = %s\n", string );
printf(" strtol = %ld\n", l );
printf(" Stopped scan at: %s\n\n", stopstring );
string = "10110134932";
printf( "string = %s\n", string );
// Convert string using base 2, 4, and 8:
for( base = 2; base <= 8; base *= 2 )
{
// Convert the string:
ul = strtoul( string, &stopstring, base );
printf( " strtol = %ld (base %d)\n", ul, base );
printf( " Stopped scan at: %s\n", stopstring );
}
}
string = 3.1415926This stopped it
strtod = 3.141593
Stopped scan at: This stopped it
string = -10110134932This stopped it
strtol = -2147483648
Stopped scan at: This stopped it
string = 10110134932
strtol = 45 (base 2)
Stopped scan at: 34932
strtol = 4423 (base 4)
Stopped scan at: 4932
strtol = 2134108 (base 8)
Stopped scan at: 932
.NET Framework の相当するアイテム
参照
参照
strtol、wcstol、_strtol_l、_wcstol_l