前回、PHP が大きな整数を解析する方法について説明し、number_format の処理について簡単に触れました。次に、この関数のソース コードを詳しく読みました。以下は簡単な分析です。
string number_format ( float $number [, int $decimals = 0 ] ) string number_format ( float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = "," )
この関数は、1、2、および 4 つのパラメーターを受け入れることができます (詳細については、コードの実装を参照してください)。
最初のパラメータのみが指定された場合、number の小数部分は削除され、各千の区切り文字は英語の小文字のカンマ「,」になります。
2 つのパラメータが指定された場合、number は小数点以下の桁数を保持します。設定する値は上記と同じです
4 つのパラメーターが指定された場合、number は小数点以下の長さの小数部分を保持し、小数点は dec_point に置き換えられ、桁区切り記号は suffix_sep に置き換えられます
// 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
関数によって実装されたさまざまなパラメータの数値は、最終的に _php_math_number_format_ex 関数を呼び出します。この関数は主に次のことを行います:
負の数値を処理します。 保持する小数点に従って浮動小数点数を丸めます。
浮動小数点式を文字列表現に変換します。
必要な文字列の長さを計算します。結果変数に代入する;
結果を戻り値にコピーする (千文字がある場合は、千文字ごとに分割する)
以上がPHP は、number_format 関数のソースコード共有を読み取りますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。