3

私はここで少しやり過ぎになってしまいましたが、それを釘付けにする方法がわかりません:

$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);

ここで達成しようとしているのは次のとおりです。

+-------+--------+----------+-------+
| 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    |
+-------+--------+----------+-------+

要するに、私は常に浮動小数点の後ろに 2 桁が必要です。

PHP のNumberFormatterでこれを達成するにはどうすればよいですか?

4

2 に答える 2

10

受け入れられた答えは正しいです.OPがNumberFormatter.

NumberFormatter::parse指定されoutputたロケール形式floatの引数を受け入れます。stringただし、解析は出力をフォーマットしません。実行するのと同じですecho (float) '5.20'; //(float) 5.2

NumberFormatter::formatoutputstring指定されたロケール形式で、integerまたはfloat引数を受け入れます。これは実行するのと同じですがecho number_format(5.2, 2); //(string) "5.20"number_format分数と千単位の区切り記号としてデフォルト値を使用し、目的の表示規則に基づいて変更する必要があります。

NumberFormatterparseメソッドを呼び出す前にメソッドを呼び出す必要があります。formatこれは、ロケール固有の文字列値を同等の整数または浮動小数点値に変換しNumberFormatter、目的の出力用に別のものにするためです。

https://3v4l.org/HRnQN

$lv = new \NumberFormatter('lv', \NumberFormatter::DECIMAL);
$lv->setAttribute($input::FRACTION_DIGITS, 2); //applies rounding during format

$en = new \NumberFormatter('en', \NumberFormatter::DECIMAL);
$en->setAttribute($output::FRACTION_DIGITS, 2); //applies rounding during format

foreach (['5,77', '5,20', '5,2', '5,00', '5', '0'] as $value) {
   $parsed = $lv->parse($value);
   var_dump($parsed); //convert locale string to float value
   var_dump($en->format($parsed)); //convert float to locale string
   var_dump($lv->format($parsed)); //convert float to locale string
   echo "<br/>\n";
}

$lv::parse($値)

+-------+--------+----------+-------+
| 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   |
+-------+--------+----------+-------+

$en::format($parsed)

+-------+--------+----------+-------+
| 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   |
+-------+--------+----------+-------+

$lv::format($parsed)

+-------+--------+----------+-------+
| 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   |
+-------+--------+----------+-------+
于 2016-07-06T20:20:16.917 に答える
0

http://php.net/manual/en/function.number-format.phpを使用する必要があります

$var = number_format(553,2);
echo $var

553 は数値、2 は表示する小数点以下の桁数です。出力します

553,00

NumberFormatter には、 http://php.net/manual/en/function.money-format.phpの後にある場合、通貨を処理する方法があります。

于 2013-07-22T14:40:26.313 に答える