strtod
, , _strtod_l
wcstod
,_wcstod_l
Mengonversi string menjadi nilai presisi ganda.
Sintaks
double strtod(
const char *strSource,
char **endptr
);
double _strtod_l(
const char *strSource,
char **endptr,
_locale_t locale
);
double wcstod(
const wchar_t *strSource,
wchar_t **endptr
);
double _wcstod_l(
const wchar_t *strSource,
wchar_t **endptr,
_locale_t locale
);
Parameter
strSource
String yang dihentikan null untuk dikonversi.
endptr
Penunjuk ke karakter yang menghentikan pemindaian.
locale
Lokal yang akan digunakan.
Nilai hasil
strtod
mengembalikan nilai angka floating-point, kecuali ketika representasi akan menyebabkan luapan, dalam hal ini fungsi mengembalikan +/-HUGE_VAL
. Tanda HUGE_VAL
cocok dengan tanda nilai yang tidak dapat diwakili. strtod
0
mengembalikan jika tidak ada konversi yang dapat dilakukan atau terjadi aliran bawah.
wcstod
mengembalikan nilai secara analog ke strtod
:
- Untuk kedua fungsi,
errno
diatur keERANGE
jika luapan atau aliran bawah terjadi. - Jika ada parameter yang tidak valid,
errno
diatur keEINVAL
dan handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter.
Untuk informasi selengkapnya tentang kode pengembalian ini dan lainnya, lihat errno
, , _doserrno
_sys_errlist
, dan _sys_nerr
.
Keterangan
Setiap fungsi mengonversi string strSource
input menjadi double
. Fungsi ini strtod
dikonversi strSource
ke nilai presisi ganda. strtod
berhenti membaca string strSource
pada karakter pertama yang tidak dapat dikenali sebagai bagian dari angka. Karakter ini mungkin karakter null yang mengakhiri. wcstod
adalah versi karakter luas dari strtod
; argumennya strSource
adalah string karakter lebar. Fungsi-fungsi ini berulah secara identik jika tidak.
Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.
Pemetaan rutin teks generik
TCHAR.H Rutin |
_UNICODE dan _MBCS tidak ditentukan |
_MBCS Didefinisikan |
_UNICODE Didefinisikan |
---|---|---|---|
_tcstod |
strtod |
strtod |
wcstod |
_tcstod_l |
_strtod_l |
_strtod_l |
_wcstod_l |
Pengaturan LC_NUMERIC
kategori lokal saat ini menentukan pengenalan karakter titik radix di strSource
. Untuk informasi selengkapnya, lihat setlocale
. Fungsi tanpa akhiran _l
menggunakan lokal saat ini; _strtod_l
identik dengan _strtod
kecuali yang pertama menggunakan yang locale
diteruskan sebagai gantinya. Untuk informasi selengkapnya, lihat Lokal.
Jika endptr
bukan , penunjuk NULL
ke karakter yang menghentikan pemindaian disimpan di lokasi yang ditujukkan oleh endptr
. Jika tidak ada konversi yang dapat dilakukan (tidak ada digit yang valid yang ditemukan atau basis yang tidak valid ditentukan), nilai strSource
disimpan di lokasi yang ditunjukkan oleh endptr
.
strtod
strSource
mengharapkan untuk menunjuk ke string salah satu formulir berikut:
[whitespace
] [sign
] {digits
[radix
digits
] | radix
digits
} [{e
| E
} [sign
] digits
]
[whitespace
] [sign
] {0x
| 0X
} {hexdigits
[radix
hexdigits
] | radix
hexdigits
} [{p
| P
} [sign
] digits
]
[whitespace
] [sign
] {INF
| INFINITY
}
[whitespace
] [sign
] [sequence
] NAN
Di depan whitespace
opsional dapat terdiri dari karakter spasi dan tab, yang diabaikan.
sign
adalah plus (+) atau minus (-).
digits
adalah satu atau beberapa digit desimal.
hexdigits
adalah satu atau beberapa digit heksadesimal.
radix
adalah karakter titik radiks, baik titik (.) di lokal "C" default, atau nilai khusus lokal jika lokal saat ini berbeda atau ketika locale
ditentukan.
sequence
adalah urutan karakter alfanumerik atau garis bawah.
Dalam bentuk angka desimal dan heksadesimal, jika tidak ada digit yang muncul sebelum karakter titik radiks, setidaknya satu harus muncul setelah karakter titik radix.
Dalam bentuk desimal, digit desimal dapat diikuti oleh eksponen, yang terdiri dari huruf pengantar (e
atau E
) dan bilangan bulat yang ditandatangani secara opsional.
Dalam bentuk heksadesimal, digit heksadesimal dapat diikuti oleh eksponen, yang terdiri dari huruf pengantar (p
atau P
) dan bilangan bulat desimal yang ditandatangani secara opsional yang mewakili eksponen sebagai kekuatan 2.
Dalam salah satu bentuk, jika tidak ada bagian eksponen atau karakter titik radiks, karakter titik radiks diasumsikan untuk mengikuti digit terakhir dalam string.
Kasus diabaikan dalam INF
formulir dan NAN
. Karakter pertama yang tidak cocok dengan salah satu bentuk ini menghentikan pemindaian.
Versi UCRT dari fungsi-fungsi ini tidak mendukung konversi huruf eksponen gaya Fortran (d
atau D
) . Ekstensi non-standar ini didukung oleh versi CRT yang lebih lama, dan mungkin merupakan perubahan yang melanggar untuk kode Anda. Versi UCRT mendukung string heksadesimal dan round-tripping dan INF
NAN
nilai, yang tidak didukung dalam versi sebelumnya. Dukungan ini juga dapat menyebabkan perubahan yang melanggar dalam kode Anda. Misalnya, string "0x1a
" akan ditafsirkan oleh strtod
sebagai 0.0 di versi sebelumnya, tetapi sebagai 26.0 dalam versi UCRT.
Persyaratan
Rutin | Header yang diperlukan |
---|---|
strtod , _strtod_l |
C: <stdlib.h> C++: <cstdlib> atau <stdlib.h> |
wcstod , _wcstod_l |
C: <stdlib.h> atau <wchar.h> C++: <cstdlib> , <stdlib.h> , atau <wchar.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
// 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);
}
// NaN
x = strtod("+nan", &stopstring);
printf("\n%f\n", x);
// INF
x = strtod("-INF", &stopstring);
printf("\n%f\n", x);
// e - exponent
x = strtod("1.18973e+49", &stopstring);
printf("\n%f\n", x);
// doesn't handle Fortran style
x = strtod("1.18973d+49", &stopstring);
printf("\n%f\n", x);
printf("No Fortran style support. Stopped parsing 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
nan
-inf
11897299999999999421285862642874618947301378359296.000000
1.189730
No Fortran style support. Stopped parsing at d+49
Lihat juga
Konversi data
Dukungan matematika dan titik mengambang
Interpretasi urutan karakter multibyte
Lokal
String ke fungsi nilai numerik
strtol
, , wcstol
_strtol_l
,_wcstol_l
strtoul
, , _strtoul_l
wcstoul
,_wcstoul_l
atof
, , _atof_l
_wtof
,_wtof_l
localeconv
_create_locale
, _wcreate_locale
_free_locale