Десятичное число PHP number_format() .99 превращается в .00

Я хочу превратить «грязную» цифру в правильно написанную цену в валюте. Вводимая цифра будет примерно 23,99000, и я хочу отобразить 23,99 + символ евро.

Я использую это:

$price = number_format($price, 2, ',', '')." €";

Но результат будет 23,00 € вместо 23,99 €.

Что я делаю неправильно? Спасибо!


person Nicolò Canal    schedule 08.02.2012    source источник
comment
Наверное плохое округление. Пожалуйста, покажите нам точное содержимое $price перед операцией.   -  person iblue    schedule 08.02.2012
comment
Что такое $price? Поплавок? Строка? Покажите нам var_dump($price).   -  person deceze♦    schedule 08.02.2012
comment
Цена точно определена как цена $ = 23,99000   -  person Nicolò Canal    schedule 08.02.2012
comment
Я использовал var_dump, и он говорит STRING   -  person Nicolò Canal    schedule 08.02.2012
comment
Тогда это строка. Превратите его в поплавок, проблема решена :-)   -  person paxdiablo    schedule 08.02.2012
comment
тогда должен быть код $price = number_format((float)$price, 2, ',', '')." €";? Верно?   -  person Nicolò Canal    schedule 08.02.2012
comment
Это отлично работает для меня, даже если цена является строкой.   -  person Explosion Pills    schedule 08.02.2012
comment
Ребята, извините за это, я только что обнаружил, что числовое форматирование уже отформатированной строки xx,xx €, поэтому она не превратилась в плавающую. Теперь все 100% нормально! Большое спасибо. Я буду беспокоить вас снова..   -  person Nicolò Canal    schedule 08.02.2012


Ответы (2)


Попробуйте что-то вроде этого:

<?php
$price = 23.99000;
$price = sprintf("%01,2f", $price).' &euro;';
echo $price;

Выход:

23,99 €

f означает, что он будет обрабатывать строку как число с плавающей запятой и соответствующим образом форматировать.

person Nick    schedule 08.02.2012
comment
Спасибо, но, как указано ниже, мне также нужно использовать десятичный разделитель-запятую, а не точку :) В любом случае, я решил эту проблему, я ошибочно числово форматировал неправильную переменную (которая уже была отформатирована). - person Nicolò Canal; 08.02.2012
comment
О, извините, отредактировал код, чтобы отразить - все, что вам нужно было сделать, это изменить . на ,, просто. - person Nick; 08.02.2012

Почему бы просто не использовать round ?

$price = round($price, 2)." &#8364;";
person Julien Balmont    schedule 08.02.2012
comment
Спасибо, но мне нужно использовать европейскую десятичную пунктуацию, то есть запятую вместо точки. - person Nicolò Canal; 08.02.2012
comment
Нет, я имею в виду, что входные цифры имеют англосаксонский (точечный) десятичный разделитель, и мне нужно преобразовать его в европейский (запятая) десятичный разделитель. Вот почему я использовал number_format вместо round(). - person Nicolò Canal; 08.02.2012
comment
О, хорошо, тогда вы должны попытаться перевести свою цену $ в число с плавающей запятой при вызове number_format - person Julien Balmont; 08.02.2012
comment
Большое спасибо! Я только что обнаружил, насколько полезен stackoverflow.com. Удивительно! - person Nicolò Canal; 08.02.2012