Udostępnij za pośrednictwem


strtold, _strtold_l, wcstold, _wcstold_l

Konwertuje ciągi na długą wartość zmiennoprzecinkową o podwójnej precyzji.

Składnia

long double strtold(
   const char *strSource,
   char **endptr
);
long double _strtold_l(
   const char *strSource,
   char **endptr,
   _locale_t locale
);
long double wcstold(
   const wchar_t *strSource,
   wchar_t **endptr
);
long double wcstold_l(
   const wchar_t *strSource,
   wchar_t **endptr,
   _locale_t locale
);

Parametry

strSource
Ciąg zakończony wartością null do konwersji.

endptr
Wskaźnik do znaku, który zatrzymuje skanowanie.

locale
Ustawienia regionalne do użycia.

Wartość zwracana

strtold Zwraca wartość liczby zmiennoprzecinkowej jako long double, z wyjątkiem sytuacji, gdy reprezentacja spowoduje przepełnienie — w tym przypadku funkcja zwraca wartość +/-HUGE_VALL. Znak HUGE_VALL odpowiada znakowi wartości, która nie może być reprezentowana. strtold Zwraca wartość 0, jeśli nie można wykonać konwersji lub występuje podpływ.

wcstold zwraca wartości analogicznie do strtold. Dla obu funkcji errno jest ustawiona wartość ERANGE , jeśli występuje przepełnienie lub niedopełnienie, a wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów.

Aby uzyskać więcej informacji na temat kodów zwracanych, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

Uwagi

Każda funkcja konwertuje ciąg strSource wejściowy na long doublewartość . Funkcja strtold zatrzymuje odczytywanie ciągu strSource przy pierwszym znaku, który nie może rozpoznać jako części liczby. Może to być znak zerowy zakończenia. Wersja znaków szerokiego znaku strtold to wcstold; jego strSource argument jest ciągiem o szerokim znaku. W przeciwnym razie te funkcje zachowują się identycznie.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Mapowania procedur tekstu ogólnego

Procedura TCHAR.H _UNICODE i _MBCS niezdefiniowane _MBCS Zdefiniowane _UNICODE Zdefiniowane
_tcstold strtold strtold wcstold
_tcstold_l _strtold_l _strtold_l _wcstold_l

Ustawienie LC_NUMERIC kategorii bieżącego ustawienia regionalnego określa rozpoznawanie znaku promienia w elemencie strSource. Aby uzyskać więcej informacji, zobacz setlocale, _wsetlocale. Funkcje bez sufiksu _l używają bieżących ustawień regionalnych i _strtold_l_wcstold_l są identyczne z _strtold ustawieniami regionalnymi i _wcstold z tą różnicą, że zamiast tego używają ustawień regionalnych, które są przekazywane. Aby uzyskać więcej informacji, zobacz Ustawienia regionalne.

Jeśli endptr nie NULLjest , wskaźnik do znaku, który zatrzymał skanowanie, jest przechowywany w lokalizacji wskazywanej przez endptr. Jeśli nie można wykonać konwersji (nie znaleziono prawidłowych cyfr lub określono nieprawidłową bazę), wartość strSource jest przechowywana w lokalizacji wskazywanej przez endptr.

strtoldstrSource oczekuje wskazywania ciągu następującego formularza:

[whitespace][sign][digits][.digits] [{d | D | e | E}[sign]digits]

Element whitespace może składać się z spacji i znaków tabulacji, które są ignorowane; sign jest plus (+) lub minus (-); i digits są co najmniej jedną cyfrą dziesiętną. Jeśli żadne cyfry nie są wyświetlane przed znakiem promienia, co najmniej jeden musi pojawić się po znaku promieniowym. Cyfry dziesiętne mogą być następnie wykładnikiem, który składa się z litery wprowadzającej (d, D, elub E) i opcjonalnie podpisanej liczby całkowitej. Jeśli nie pojawia się żadna część wykładnicza lub znak promienia, przyjmuje się, że znak promienia jest obserwowany po ostatniej cyfrze w ciągu. Pierwszy znak, który nie pasuje do tego formularza, zatrzymuje skanowanie.

Wymagania

Procedura Wymagany nagłówek
strtold, _strtold_l <stdlib.h>
wcstold, _wcstold_l <stdlib.h> lub <wchar.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

// crt_strtold.c
// Build with: cl /W4 /Tc crt_strtold.c
// This program uses strtold to convert a
// string to a long double-precision value.

#include <stdlib.h>
#include <stdio.h>

int main( void )
{
   char *string;
   char *stopstring;
   long double x;

   string = "3.1415926535898This stopped it";
   x = strtold(string, &stopstring);
   printf("string = %s\n", string);
   printf("   strtold = %.13Lf\n", x);
   printf("   Stopped scan at: %s\n\n", stopstring);
}
string = 3.1415926535898This stopped it
   strtold = 3.1415926535898
   Stopped scan at: This stopped it

Zobacz też

Konwersja danych
Obsługa obliczeń matematycznych i zmiennoprzecinkowych
Interpretacja sekwencji znaków wielobajtowych
ustawienia regionalne
Funkcje ciąg-wartość liczbowa
strtod, _strtod_l, wcstod, _wcstod_l
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