نطاقات
المتغيرات
أفعال

strtof, strtod, strtold

من cppreference.com
< c | string | byte
<tbody> </tbody> <tbody class="t-dcl-rev "> </tbody><tbody> </tbody>
معرفة في ملف <stdlib.h>
float strtof( const char *restrict str, char **restrict str_end );
(منذ C99)
double strtod( const char *str, char **str_end );
(حتى C99)
double strtod( const char *restrict str, char **restrict str_end );
(منذ C99)
long double strtold( const char *restrict str, char **restrict str_end );
(منذ C99)

تستخلص قيمة لعدد ذو فاصلة عائمة من سلسلة بايت مشار إليها بـ ‎str‎

تتجاهل الدالة أي مسافات (يتم اختبار الحروف باستخدام isspace()‎) حتى يتم الوصول إلى أول حرف ليس مسافة. بعد ذلك تاخذ أكبر عددد ممكن من الحروف التي يمكن تشكيل عدد ذو فاصلة عائمة منها. يمكن للسلسلة النصية أن تكون أحد هذه الأشياء:

  • تمثيل عشري لعدد ذو فاصلة عائمة. يتكون ذلك من:
  • (اختياري) علامة موجب أو سالب
  • رقم واحد على الأقل وربما فاصلة (يتم اختبار الفاصلة طبقا لشروط setlocale‎) (هذا هو الأساس)
  • (اختياري) e أو E متبوعة بعلامة موجب أو سالب اختيارية ورقم واحد على الأقل (هذا هو أس العشرة المضروبة)
  • تمثيل ثنائي لعدد ذو فاصلة عائمة. يتكون ذلك من:
  • (اختياري) علامة موجب أو سالب
  • 0x أو 0X
  • رقم ستةعشري واحد على الأقل وربما فاصلة (يتم اختبار الفاصلة طبقا لشروط locale‎) (هذا هو الأساس)
  • (اختياري) p أو متبوعة بعلامة موجب أو سالب اختيارية ورقم واحد على الأقل (هذا هو أس الاثنين المضروبة)
  • اللا نهاية (Infinity) :
  • (اختياري) علامة موجب أو سالب
  • السلسلة INF أو INFINITY بغض النظر عن كون بعض الحروف Capital أو small (أي case-insensitive)
  • "ليس بعدد" (Not-A-Number):
  • (اختياري) علامة موجب أو سالب
  • السلسلة NAN أو NAN(char_sequence)‎ مع تجاهل كون حروف NAN ‏ Capital أو small.‏ char_sequence تحوى أرقام وحروف جقط. الناتج هو قيمة NaN صامتة.
  • حسب الإعداد المحلي locale‎ يجوز وجوود صور أخرى غير التي ذكرت هنا

تقوم الدالة بتغيير المؤشر المشار إليه بـ ‎str_end‎ بحيث يشير إلى الحرف التالي لآخر حرف تم ترجمته. يتم تجاهل المعطى ‎str_end‎ إذا كان مساويا لـ NULL‎.

المعطيات

str - مؤشر إلى سلسلة من الحروف مراد ترجمتها ومنتهية بـ ‎'\0'
str_end - مؤشر إلى مؤشر من الحروف.

القيمة المُرجعة

قيمة من النوع double تقابل محتوى ‎str‎ عند النجاح. في حالة كانت القيمة المحولة خارج النطاق تكون القيمة المُرجعة HUGE_VAL‎ أو HUGE_VALF‎ أو HUGE_VALL‎ مع حدوث خطأ في المدى. في حالة فشل التحويل يتم إرجاع 0.

مثال

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

int main(void) 
{
    char *str = " 111.11 22.22 0X1.BC70A3D70A3D7P+6  1.18973e+4932";
    char *str_end;
 
    printf("%f\n", strtod(str,&str_end));
    printf("str_end --> [%c]\n", *str_end);
    printf("%f\n", strtod(str_end,&str_end));
    printf("%g\n", strtod(str_end,&str_end));
    printf("%f\n", strtod(str_end, NULL));
 
    return 0;
}

الخرج:

111.110001
str_end --> [ ]
22.219999
111.11
inf

أنظر أيضا

تحول سلسلة من البايت إلى عدد float
(دالة) [edit]
مقالة مرجع C++‎ عن strtof, strtod, strtold