jol*_*olt 3 php numberformatter
我在这里结束了一点矫枉过正,但我似乎无法解决这个问题:
$formatter = new NumberFormatter('lv_LV', NumberFormatter::DECIMAL);
$formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
$formatter->setAttribute(NumberFormatter::MIN_FRACTION_DIGITS, 2);
$formatter->setAttribute(NumberFormatter::MAX_FRACTION_DIGITS, 2);
$formatter->setAttribute(NumberFormatter::DECIMAL_ALWAYS_SHOWN, 2);
Run Code Online (Sandbox Code Playgroud)
我想在这里实现的是:
+-------+--------+----------+-------+
| INPUT | ACTUAL | EXPECTED | VALID |
+-------+--------+----------+-------+
| 5,77 | 5.77 | 5.77 | YES |
| 5,20 | 5.2 | 5.20 | NO |
| 5,00 | 5 | 5.00 | NO |
| 0 | 0 | 0.00 | NO |
+-------+--------+----------+-------+
Run Code Online (Sandbox Code Playgroud)
简而言之,我总是希望浮点后面有两位数.
如何使用PHP的NumberFormatter实现这一目标?
接受的答案是正确的,我希望澄清为什么OP没有收到预期的结果NumberFormatter.
NumberFormatter::parse将outputa float和接受string指定语言环境格式的参数.但是,Parse不会格式化输出.它相当于表演echo (float) '5.20'; //(float) 5.2
NumberFormatter::format将output使用string指定的语言环境格式并接受integer或float参数.它相当于执行echo number_format(5.20, 2); //(string) "5.20"但是number_format使用默认值作为分数和千位分隔符,它们需要根据所需的显示规则进行更改.
NumberFormatter要求您在调用parse方法之前调用该format方法,以便将特定于语言环境的字符串值转换为等效的整数或浮点值,并NumberFormatter为所需的输出分别设置.
$input = new \NumberFormatter('lv', \NumberFormatter::DECIMAL);
$input->setAttribute($input::FRACTION_DIGITS, 2); //applies rounding during format
$output = new \NumberFormatter('en', \NumberFormatter::DECIMAL);
$output->setAttribute($output::FRACTION_DIGITS, 2); //applies rounding during format
foreach (['5,77', '5,20', '5,2', '5,00', '5', '0'] as $value) {
$parsed = $input->parse($value);
var_dump($parsed); //convert to PHP value float
var_dump($output->format($parsed)); //convert to locale based display
var_dump($input->format($parsed)); //convert to locale based display
echo "<br/>\n";
}
Run Code Online (Sandbox Code Playgroud)
输入::解析
+-------+--------+----------+-------+
| Value | Parse | EXPECTED | VALID |
+-------+--------+----------+-------+
| 5,77 | 5.77 | 5.77 | YES |
| 5,20 | 5.2 | 5.2 | YES |
| 5,2 | 5.2 | 5.2 | YES |
| 5,00 | 5 | 5 | YES |
| 5 | 5 | 5 | YES |
| 0 | 0 | 0 | YES |
+-------+--------+----------+-------+
Run Code Online (Sandbox Code Playgroud)
输出格式
+-------+--------+----------+-------+
| Value | Format | EXPECTED | VALID |
+-------+--------+----------+-------+
| 5,77 | 5.77 | 5.77 | YES |
| 5,20 | 5.20 | 5.20 | YES |
| 5,2 | 5.20 | 5.20 | YES |
| 5,00 | 5.00 | 5.00 | YES |
| 5 | 5.00 | 5.00 | YES |
| 0 | 0.00 | 0.00 | YES |
+-------+--------+----------+-------+
Run Code Online (Sandbox Code Playgroud)
输入::格式
+-------+--------+----------+-------+
| Value | Format | EXPECTED | VALID |
+-------+--------+----------+-------+
| 5,77 | 5,77 | 5,77 | YES |
| 5,20 | 5,20 | 5,20 | YES |
| 5,2 | 5,20 | 5,20 | YES |
| 5,00 | 5,00 | 5,00 | YES |
| 5 | 5,00 | 5,00 | YES |
| 0 | 0,00 | 0,00 | YES |
+-------+--------+----------+-------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3115 次 |
| 最近记录: |