PHP number_format (): округление чисел с последующим форматированием в валюте - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь создать интернет-магазин, и наши цены должны колебаться в зависимости от обменного курса для разных стран, поэтому я имею дело с большим количеством десятичных знаков.

То, что я хочу сделать, это округлить первоначальную цену до ближайшего полного числа (поскольку они могут сохранить изменение). Но затем я хочу отформатировать его как валюту с двумя десятичными знаками.

<?php
$number = 12345.6789;
echo $number;  // outputs '12345.6789'
$number = number_format($number,0);
echo $number;  // outputs '12,346'
$number = number_format($number,2);
echo $number;  // outputs '12.00'
?>

После форматирования без десятичных знаков он начинает читать ',' как десятичный разделитель вместо разделителя тысяч и форматирует его для двух десятичных знаков.

Также выдает следующую ошибку:

A non well formed numeric value encountered in C:\wamp64\www\Lifting365\test.php on line 6

Любая помощь или предложения о том, как мне добиться того, что я ищу, будет принята с благодарностью.

Ответы [ 5 ]

0 голосов
/ 08 мая 2018

PHP-функция, которую вы ищете: money_format () http://php.net/manual/en/function.money-format.php, прочитайте справочную страницу (включая комментарии)

0 голосов
/ 08 мая 2018

Как указано в документации, number_format возвращает строковое значение, вы не можете использовать его как число. Используйте функцию round () для округления вашего числа, если вы хотите округлить его до прямого целого числа, используйте вместо него ceil () .

number_format(round(12345.6789), 2);
0 голосов
/ 08 мая 2018

Используйте функцию round, а затем number_format.

// returns 12,346.00
number_format(round(12345.6789), 2);
0 голосов
/ 08 мая 2018

Функция number_format принимает 4 параметра. По умолчанию точка будет использоваться в качестве десятичного разделителя и запятой в качестве разделителя тысяч (12345,6789 становится 12 346 после вашего первого вызова; как исключено). Это явно не задокументировано, но число_формат также округляется.

http://php.net/manual/de/function.number-format.php

string number_format ( float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = "," )

Вы получаете ошибку, потому что вы повторно используете ту же самую переменную $number. После вашего первого вызова number_format у вас больше нет значения с плавающей запятой.

<?php
    $number = 12345.6789;
    echo $number."<br>";                            // outputs 12345.6789
    echo number_format($number,0)."<br>";           // outputs 12,346  
    echo number_format($number,2)."<br>";           // outputs 12,345.68
?>

Если вы не уверены, что находится в вашей переменной, вы можете применить floatval к ней.

echo number_format(floatval($number),2);
0 голосов
/ 08 мая 2018

// применять intval для получения нижнего целого значения (для целей изменения)

$number = 12345.6789;
echo $number;  // outputs '12345.6789'
echo intval($number)."<br/>";  // outputs '12345'
echo number_format(intval($number),0,'.','.'); // outputs '12.345'
echo number_format(intval($number),0,'.',','); // outputs '12,345'
...