Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: При арифметической операции пропадает дробная часть числа
Покинул форум
Сообщений всего: 1
Дата рег-ции: Май 2011
Помог: 0 раз(а)
Работаю над интернет-магазином. (Программированием занимаюсь где-то полгода, ранее занимался только дизайном и версткой) Все ровненько, складненько, только вот незадача: при подсчете суммы в корзине куда-то пропадает дробная часть. Бьюсь уже довольно давно не могу понять в чем причина((((
Вот метод, который собсно достает из базы значения и распихивает по нужным объектам:
Теперь два слова о том, что живет в базе и что получается на выходе.
В данный момент для примера в табличку purchases забит 1 товар в количестве одна шт, ценой 12,25 коп. Вывел эхом $row["price"] полкчил правильное значение - 12,25 коп. А вот после $summ[$i] = $row["price"] * $row["amount"]; сумма становится уже просто 12 руб. Т.е. дробная часть просто откидывается. Буду признателен, если подскажите почему и как это вылечить?... Заранее спасибо!
Zuldek
Отправлено: 13 Мая, 2011 - 09:07:24
Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Здесь не столько операции с типами, сколько некорректно записанное вещественное число.
В PHP разделителем целой и дробной частей является точка (то есть".")
Что-то вроде этого Вам будет еще нужно:
$summ[$i] = (double)$row["price"] *(double) $row["amount"]
(не забывайте, что $row['price'] должно содержать не "12,25" а 12.25) - тип поля в БД поставьте как DOUBLE
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Zuldek
Отправлено: 13 Мая, 2011 - 09:21:00
Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Помог: 50 раз(а)
EuGen пишет:
Здесь не столько операции с типами, сколько некорректно записанное вещественное число.
В PHP разделителем целой и дробной частей является точка (то есть".")
Что-то вроде этого Вам будет еще нужно:
$summ[$i] = (double)$row["price"] *(double) $row["amount"]
тип поля в БД поставьте как DOUBLE
1. Здесь именнно операции с типами данных и неправильная запись значения. в бд 12,25 стоит как строка.
2. Объясните назначение приведения к double в строке $summ[$i] = (double)$row["price"] *(double) $row["amount"], если в бд тип поля double?
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
1. Какими бы приведениями типов Вы не пользовались, "12,25" не превратится в 12.25 Приведение типов лишь поможет понять, почему оно превращается в 12
2. Если в БД тип данных поля - строка, но лежит там "12.25" (именно как строка), а не 12.25 то явное приведение к double указывает на то, что трактовать в PHP скрипте эти данные нужно было бы как число, ограничивая, например, допустимый набор операций для него (скажем, конкатенация уже будет некорректна). Здесь double скорее для указания того, что мы понимаем, что делаем, это не несет строгих ограничений.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.