Forum Webscript.Ru
Программирование => PHP => Тема начата: Vad от 15 Мая 2003, 17:49:56
-
Почему php или mysql обрезает числа после запятой. Пытался изменять в базе тип на double float и т.д. в базе выводится разделить а при выводе php его сьедает
-
покажи код
-
да я вообщемто ничего особенного не делаю
вот так достаю из базы
$price = number_format ($row ["price"],0,".",".");
ну и потом
echo "$price €";
-
Там, где у тебя нолик - нужно вставить число символов после запятой.
-
спасибо
-
Только теперь он выводит числа в формате
125.000,00 а как сделать чтобы если десятичная часть отсутствует т.е. равна 0 не выводило 00 в конце т.е. 125.000
-
Vad
Мой способ из области "через Ж", но в http://www.php.net/number_format я ничего подходящего не нашел.
if (substr($price, -3) == ".00")
$price = substr($price, 0, -3);
Но по-моему использовать одинаковый символ как thousands и decimals separator - не самая лучшая идея. Вот более правильная альтернатива моему верхнему коду, которая ловит числа типа 123.4 (не превращает их в 123.40):
function my_number_format($num, $decimals = 2){
$price = number_format($num, $decimals, ".", ",");
list($int_part, $decimal_part) = explode(".", $price);
$decimal_part = strrev(intval(strrev($decimal_part)));
if ($decimal_part == 0){
return $int_part;
} else {
return $int_part.".".$decimal_part;
}
}
echo my_number_format($row ["price"]);
Не претендую на звание "самый понятный код года", но этот способ я проверил...
-
Спасибо
Да уж не думал что все так сложно
-
$dec = substr($price, -2);
if (intval($dec) == 0) {
$price = substr($price, 0, (count($price)-3));
print $price;
// пишем только целое
} else {
print $price;
// пишем всю цену
}
-
должно работать
-
А почему твоя функция выдает число в виде
125,000.75 разве не правильней десятичную часть отделять запятой а тысячи разделять точкой?
-
Vad
Это англицкий вариант
-
Vad
Читай man по number_format().
десятичную чать можно от целой (как и тысячи) можно разделять каким угодно символом.
-
$dec = substr($price, -2);
if (intval($dec) == 0) {
$price = substr($price, 0, (count($price)-3));
print $price;
// пишем только целое
} else {
print $price;
// пишем всю цену
}
не работает выдает только 2 последних символа
-
Vad:
не работает выдает только 2 последних символа
все работает.
-
Croaker
В твоем примере надо count на strlen заменить.
А ещё лучше просто написать $price = substr($price, 0, -3);
-
FreeSpace:
В твоем примере надо count на strlen заменить.
чем лучше?
FreeSpace:
$price = substr($price, 0, -3);
угу, это проще и удобней.
-
а если так попробовать
$price = str_replace(".00", "", $price);
-
Croaker
Count - это синоним sizeof и возвращает количество элементов в массиве. А так как у тебя на месте массива - строка, то count() возвращает единицу. Получаестя, что $price = substr($price, 0, (count($price)-3)); работает так же, как и $price = substr($price, 0, -2); (один минус три равно два) и возвращает число с точкой в конце.
MadDog
Твой пример, как и мой первый, неправильно ловит числа типа 735.30
-
FreeSpace
смотри тут (http://dmitriev.msk.ru/phpinfo.php?p=1234.54)
p = переменная, в которую можно подставить число
-
Croaker
Теперь смотри ты (http://dmitriev.msk.ru/phpinfo.php?p=1234.10).
Человек хотел, чтобы лишние нули в конце не показывались.
К примеру, число 1234.10 нужно выводить как 1234.1
А по поводу count($price)-4
count($price) == 1 (потому что $price - трока, а не массив).
count($price) - 4 == -3 (потому что 1 - 4 = -3)
Получается, что всё работает как надо, но count тут не к месту.
Просто в итоге выражение выглядит как $price = substr($price, 0, -3).
Вот я и говорю, что нужно писать либо strlen, который вернет правильнуое количество символов, либо просто -3.
[off]Но это уже оффтопик пошел...[/off]