المتغيرات
فضاءات التسمية
أفعال

strtof, strtod, strtold

من cppreference.com
< c‏ | string‏ | byte
معرفة في ملف <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()‎) حتى يتم الوصول إلى أول حرف ليس مسافة. بعد ذلك تاخذ أكبر عددد ممكن من الحروف التي يمكن تشكيل عدد ذو فاصلة عائمة منها. يمكن للسلسلة النصية أن تكون أحد هذه الأشياء:

  • تمثيل عشري لعدد ذو فاصلة عائمة. يتكون ذلك من:
  • (اختياري) علامة موجب أو سالب
  • رقم واحد على الأقل وربما فاصلة (يتم اختبار الفاصلة طبقا لشروط locale‎) (هذا هو الأساس)
  • (اختياري) 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