Heim > Artikel > Backend-Entwicklung > PHP liest die Quellcodefreigabe der Funktion „number_format“.
Das letzte Mal habe ich darüber gesprochen, wie PHP große Ganzzahlen analysiert. Dann habe ich den Quellcode dieser Funktion im Detail gelesen.
string number_format ( float $number [, int $decimals = 0 ] ) string number_format ( float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = "," )
Die Funktion kann 1, 2 oder 4 Parameter akzeptieren (Einzelheiten finden Sie in der Code-Implementierung).
Wenn nur der erste Parameter angegeben wird, wird der Dezimalteil der Zahl entfernt und jedes Tausendertrennzeichen ist ein englisches Kleinbuchstabe ",";
Wenn zwei Parameter angegeben werden, wird die Zahl so angezeigt beibehalten Die Anzahl der Stellen nach dem Dezimalpunkt erreicht den von Ihnen festgelegten Wert, der Rest ist derselbe wie oben.
Wenn vier Parameter angegeben werden, behält Zahl den Dezimalteil der Dezimallänge bei und der Dezimalpunkt wird durch dec_point ersetzt , und das Tausendertrennzeichen wird durch tausende_sep ersetzt
// number // 你要格式化的数字 // num_decimal_places // 要保留的小数位数 // dec_separator // 指定小数点显示的字符 // thousands_separator // 指定千位分隔符显示的字符 /* {{{ proto string number_format(float number [, int num_decimal_places [, string dec_separator, string thousands_separator]]) Formats a number with grouped thousands */ PHP_FUNCTION(number_format) { // 期望number_format的第一个参数num是double类型的,在词法阶段已经对字面量常量做了转换 double num; zend_long dec = 0; char *thousand_sep = NULL, *dec_point = NULL; char thousand_sep_chr = ',', dec_point_chr = '.'; size_t thousand_sep_len = 0, dec_point_len = 0; // 解析参数 ZEND_PARSE_PARAMETERS_START(1, 4) Z_PARAM_DOUBLE(num)// 拿到double类型的num Z_PARAM_OPTIONAL Z_PARAM_LONG(dec) Z_PARAM_STRING_EX(dec_point, dec_point_len, 1, 0) Z_PARAM_STRING_EX(thousand_sep, thousand_sep_len, 1, 0) ZEND_PARSE_PARAMETERS_END(); switch(ZEND_NUM_ARGS()) { case 1: RETURN_STR(_php_math_number_format(num, 0, dec_point_chr, thousand_sep_chr)); break; case 2: RETURN_STR(_php_math_number_format(num, (int)dec, dec_point_chr, thousand_sep_chr)); break; case 4: if (dec_point == NULL) { dec_point = &dec_point_chr; dec_point_len = 1; } if (thousand_sep == NULL) { thousand_sep = &thousand_sep_chr; thousand_sep_len = 1; } // _php_math_number_format_ex // 真正处理的函数,在本文件第1107行 RETVAL_STR(_php_math_number_format_ex(num, (int)dec, dec_point, dec_point_len, thousand_sep, thousand_sep_len)); break; default: WRONG_PARAM_COUNT; } } /* }}} */
_php_math_number_format_ex
Funktionsimplementierung Verschiedene Parameternummern rufen schließlich die Funktion _php_math_number_format_ex auf. Was die Funktion hauptsächlich tut, ist:
Negative Zahlen verarbeiten;
Gleitkommazahlen entsprechend dem beizubehaltenden Dezimalpunkt runden;
Rufen Sie die Funktion strpprintf auf, um Gleitkommaausdrücke in eine Zeichenfolgendarstellung umzuwandeln 🎜> Berechnen Sie die Länge der Zeichenfolge, die der Ergebnisvariablen zugewiesen werden muss.
Kopieren Sie das Ergebnis in den Rückgabewert (wenn es Tausende Zeichen gibt, führen Sie eine Tausender-Zeichen-Aufteilung durch)
Das obige ist der detaillierte Inhalt vonPHP liest die Quellcodefreigabe der Funktion „number_format“.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!