Gerçek Sayıların Çözümlenmesi
Önceki Dizgelerdeki Sayıların Çözümlenmesi Sonraki
Gerçek Sayıların Çözümlenmesi
str işlevleri stdlib.h dosyasında, wcs ile başlayan işlevler wchar.h dosyasında bildirilmiştir. Bu bölümdeki işlevlerin prototiplerinde restrict kullanımı şaşırtıcı olabilir. Kullanışsız görünür ama ISO C standardı onu kullandığı için (burada tanımlı işlevler için) biz de kullandık.
double strtod
(const char *restrict dizge,
 char **restrict      kalan-dizge)
işlev
strtod ("string-to-double" kısaltması) işlevi dizge dizgesinin baştarafını bir gerçek sayıya dönüştürür ve sonucu double türünde bir değer olarak döndürür.
İşlev dizge'yi şu şekilde analiz etmeye çalışır:
  • Boşluk karakterlerinden oluşan bir dizge (muhtemelen boş). Boşluk karakterleri isspace işlevi ile saptanır ve bunlar iptal edilir (bkz. Karakterlerin Sınıflandırılması).
  • İsteğe bağlı artı ya da eksi işareti (+ veya -).
  • Onluk ya da onaltılık biçimde bir gerçek sayı. Onluk biçim şöyle çözümlenmeye çalışılır:
    • İsteğe bağlı olarak gösterimi yerele bağlı bir ondalık nokta (normalde .) içeren ve aralarında boşluk bulunmayan rakamlar. (Bkz. Soysal Sayısal Biçimleme Parametreleri).
    • İsteğe bağlı üstel kısım. e veya E karakteri ile isteğe bağlı bir işaret ve rakamlardan oluşur.
    Onaltılık biçim şöyle çözümlenmeye çalışılır:
    • 0x veya 0X ile başlayan, isteğe bağlı olarak gösterimi yerele bağlı bir ondalık nokta (normalde .) içeren ve aralarında boşluk bulunmayan rakamlar. (Bkz. Soysal Sayısal Biçimleme Parametreleri).
    • İsteğe bağlı ikilik üstel kısım. p veya P karakteri ile isteğe bağlı bir işaret ve rakamlardan oluşur.
  • Dizgede kalan karakterler. Eğer kalan-dizge bir boş gösterici değilse işlev bu artıkları *kalan-dizge içine yerleştirir.
Eğer dizge boşsa, sadece boşluk karakterleri içeriyorsa ya da başlangıçtaki altdizge bir gerçek sayı için umulan sözdizimine sahip değilse hiçbir dönüşüm yapılmaz. Bu durumda, işlev sıfırla döner ve dizge değeri *kalan-dizge içine yerleştirir.
Yerel, standart "C" ya da "POSIX" yerellerinden farklıysa, bu işlev gerçeklemeye bağlı olarak ek sözdizimini tanıyabilir.
Eğer dizge bir gerçek sayı için geçerli sözdizimine sahip olduğu halde değer double türün kapsamı dışındaysa, strtod işlevi Hataların Matematiksel İşlevlerce Raporlanması bölümünde açıklandığı gibi üstten ya da alttan taşma sinyalleyecektir.
strtod işlevi dört özel girdi dizgesi tanır. Bu dizgelerden "inf" ve "infinity" ya oo'a ya da gerçek sayı biçimi sonsuzlukları desteklemiyorsa gösterilebilir en büyük sayıya dönüştürülür. Önlerine işareti belirtmek için bir "+" veya "-" konulabilir. Bu dizgelerde harf büyüklüğünün önemi yoktur.
"nan" ve "nan(karakterler)" dizgeleri ise NaN'a dönüştürülür. Yine harf büyüklüğünün önemi yoktur. Eğer karakterler belirtilmişse, NaN'ın kısmi bir gösterimine (herşey olabilir) karşılık olarak kullanılır.
Sıfır geçerli bir sonuç olduğu kadar hata oluştuğunu da belirtebilir. Hatayı sınamak için errno ve kalan-dizge'yi strtol işlevinin açıklamasında anlatıldığı gibi kullanmalısınız.
float strtof
(const char *dizge,
 char      **kalan-dizge)
işlev
long doublestrtold
(const char *dizge,
 char      **kalan-dizge)
işlev
Bu işlevler strtod işlevinin benzeri olmakla birlikte, sırayla float ve long double değerle dönerler. Hataları strtod gibi raporlarlar. Hassasiyeti daha düşük olduğundan strtof işlevi strtod işlevinden daha hızlı olabilir; tersine, hassasiyeti daha yüksek olduğundan strtold daha yavaş olabilir (long double türünün ayrı bir tür olduğu sistemlerde).
Bu işlevler ISO C99'da yeni olmasına rağmen evvelce GNU oluşumuydular.
double wcstod
(const wchar_t *restrict dizge,
wchar_t **restrict       kalan-dizge)
işlev
float wcstof
(const wchar_t *dizge,
 wchar_t      **kalan-dizge)
işlev
long double wcstold
(const wchar_t *dizge,
 wchar_t      **kalan-dizge)
işlev
wcstod, wcstof ve wcstol işlevleri sırayla strtod, strtof ve strtold işlevleriyle geniş arakterleri kabul etmeleri dışında hemen herşeyleriyle benzerdirler.
wcstod işlevi ISO C90'ın 1. düzeltmesinde vardı. wcstof ve wcstold işlevleri ise ISO C99'da tanıtıldı.
double atof
(const char *dizge)
işlev
Bu işlev alttan ve üstten taşma hatalarının saptanmasını gerektirmemesi dışında strtod işlevine benzer. atof işlevi mevcut kodla uyumluluk adına vardır; strtod kullanım bakımından daha güçlüdür.
GNU C kütüphanesi ayrıca bu işlevlerin dönüşümde yerel kullanmak için bir ek argüman alan _l sürümlerini de içerir. Bkz. Tamsayıların Çözümlenmesi.
Önceki Üst Ana Başlık Sonraki
Tamsayıların Çözümlenmesi Başlangıç Eski Moda System V Sayıdan Dizgeye Dönüşüm İşlevleri
Bir Linux Kitaplığı Sayfası