Forum Webscript.Ru

Программирование => PHP => Тема начата: Vad от 15 Мая 2003, 17:49:56

Название: Отображение десятичных чисел
Отправлено: Vad от 15 Мая 2003, 17:49:56
Почему php или  mysql обрезает числа после запятой. Пытался изменять в базе тип на double float и т.д. в базе выводится разделить а при выводе php его сьедает
Название: Отображение десятичных чисел
Отправлено: Croaker от 15 Мая 2003, 17:53:14
покажи код
Название: Отображение десятичных чисел
Отправлено: Vad от 15 Мая 2003, 17:58:33
да я вообщемто ничего особенного не делаю
вот так достаю из базы
$price =  number_format ($row ["price"],0,".",".");
ну и потом
echo "$price €";
Название: Отображение десятичных чисел
Отправлено: Croaker от 15 Мая 2003, 18:02:16
Там, где у тебя нолик - нужно вставить число символов после запятой.
Название: Отображение десятичных чисел
Отправлено: Vad от 15 Мая 2003, 18:28:12
спасибо
Название: Отображение десятичных чисел
Отправлено: Vad от 15 Мая 2003, 19:20:37
Только теперь он выводит числа в формате
125.000,00 а как сделать чтобы если десятичная часть отсутствует т.е. равна 0 не выводило 00 в конце т.е. 125.000
Название: Отображение десятичных чисел
Отправлено: FreeSpace от 15 Мая 2003, 20:27:25
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"]);
Не претендую на звание "самый понятный код года", но этот способ я  проверил...
Название: Отображение десятичных чисел
Отправлено: Vad от 16 Мая 2003, 10:20:53
Спасибо
Да уж не думал что все так сложно
Название: Отображение десятичных чисел
Отправлено: Croaker от 16 Мая 2003, 10:29:22

$dec = substr($price, -2);
if (intval($dec) == 0) {
  $price = substr($price, 0, (count($price)-3));
  print $price;
  // пишем только целое
} else {
  print $price;
  // пишем всю цену
}
Название: Отображение десятичных чисел
Отправлено: Croaker от 16 Мая 2003, 10:31:37
должно работать
Название: Отображение десятичных чисел
Отправлено: Vad от 16 Мая 2003, 11:24:53
А почему твоя функция выдает число в виде
125,000.75 разве не правильней десятичную часть отделять запятой а тысячи разделять точкой?
Название: Отображение десятичных чисел
Отправлено: F.A.K.K.2 от 16 Мая 2003, 11:27:08
Vad
Это англицкий вариант
Название: Отображение десятичных чисел
Отправлено: Croaker от 16 Мая 2003, 11:28:44
Vad
Читай man по number_format().

десятичную чать можно от целой (как и тысячи) можно разделять каким угодно символом.
Название: Отображение десятичных чисел
Отправлено: Vad от 16 Мая 2003, 11:41:04
Цитировать
$dec = substr($price, -2);
if (intval($dec) == 0) {
  $price = substr($price, 0, (count($price)-3));
  print $price;
  // пишем только целое
} else {
  print $price;
  // пишем всю цену
}


не работает выдает только 2 последних символа
Название: Отображение десятичных чисел
Отправлено: Croaker от 16 Мая 2003, 11:50:16
Цитировать
Vad:
не работает выдает только 2 последних символа


все работает.
Название: Отображение десятичных чисел
Отправлено: FreeSpace от 16 Мая 2003, 15:49:09
Croaker
В твоем примере надо count на strlen заменить.
А ещё лучше просто написать $price = substr($price, 0, -3);
Название: Отображение десятичных чисел
Отправлено: Croaker от 16 Мая 2003, 15:53:28
Цитировать
FreeSpace:
В твоем примере надо count на strlen заменить.


чем лучше?


Цитировать
FreeSpace:
$price = substr($price, 0, -3);

угу, это проще и удобней.
Название: Отображение десятичных чисел
Отправлено: MadDog от 16 Мая 2003, 16:13:10
а если так попробовать
$price = str_replace(".00", "", $price);
Название: Отображение десятичных чисел
Отправлено: FreeSpace от 16 Мая 2003, 19:14:26
Croaker
Count - это синоним sizeof и возвращает количество элементов в массиве. А так как у тебя на месте массива - строка, то count() возвращает единицу. Получаестя, что $price = substr($price, 0, (count($price)-3)); работает так же, как и $price = substr($price, 0, -2); (один минус три равно два) и возвращает число с точкой в конце.

MadDog
Твой пример, как и мой первый, неправильно ловит числа типа 735.30
Название: Отображение десятичных чисел
Отправлено: Croaker от 16 Мая 2003, 21:50:21
FreeSpace
смотри тут (http://dmitriev.msk.ru/phpinfo.php?p=1234.54)

p = переменная, в которую можно подставить число
Название: Отображение десятичных чисел
Отправлено: FreeSpace от 17 Мая 2003, 12:20:23
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]