NumberFormatter::parse()
numfmt_parse
(PHP 5 >= 5.3.0, PHP 7, PECL intl >= 1.0.0)
Parse a number
说明
面向对象风格public NumberFormatter::parse(string $value[,int $type[,int &$position]]): mixed
过程化风格
numfmt_parse(NumberFormatter$fmt,string $value[,int $type[,int &$position]]): mixed
Parse a string into a number using the current formatter rules.
参数
- $fmt
NumberFormatter object.
- $type
The formatting type to use. By default,
NumberFormatter::TYPE_DOUBLE
is used.- $position
Offset in the string at which to begin parsing. On return, this value will hold the offset at which parsing ended.
返回值
The value of the parsed number or FALSE
on error.
范例
numfmt_parse() example
<?php $fmt = numfmt_create( 'de_DE', NumberFormatter::DECIMAL ); $num = "1.234.567,891"; echo numfmt_parse($fmt, $num)."\n"; echo numfmt_parse($fmt, $num, NumberFormatter::TYPE_INT32)."\n"; ?>
OO example
<?php $fmt = new NumberFormatter( 'de_DE', NumberFormatter::DECIMAL ); $num = "1.234.567,891"; echo $fmt->parse($num)."\n"; echo $fmt->parse($num, NumberFormatter::TYPE_INT32)."\n"; ?>
以上例程会输出:
1234567.891 1234567
参见
- numfmt_get_error_code() Get formatter's last error code
- numfmt_format() Format a number
- numfmt_parse_currency() Parse a currency number
'en_EN': basically the first part is the language and the second part the region: 'en_EN' - english, England 'en_US' - english, United States You can lookup the language tags like 'en_EN' here: https://datahub.io/core/language-codes see "ietf-language-tags"
It interesting to note that the expected behavior for this function may change according to your ICU version. In ICU 4.4.2 (standard for Ubuntu 10.* with PHP 5.3.5) With locale 'en', input of 100,1 returns 1001 In ICU 4.8.1 (standard for Ubuntu 12.* with PHP 5.3.10) With locale 'en', input of 100,1 returns "false" Be sure to note your ICU version in phpinfo() to be sure you will get the expected output.
to parse English use this format: 'en_EN' . I had to guess. I have no idea where you would find these codes. <?php echo "<pre>"; $fmt = numfmt_create( 'en_EN', NumberFormatter::DECIMAL ); $num = "1,234,567.891"; echo numfmt_parse($fmt, $num)."\n"; echo numfmt_parse($fmt, $num, NumberFormatter::TYPE_INT32)."\n"; echo "</pre>"; ?> If this doesn't work well all I can say is it shouldn't work because it makes no sense that you would repeat the code twice "en and EN" in one code. Stuff that makes no sense is hard to guess. I couldn't find a page that has these codes either. I guess documentation is bound to be incomplete since it's so voluminous. Documentation has a language and syntax unto itself yet there are no tutorials on understanding documentation.