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 :: Математика в mysql

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Математика в mysql
cooperok
Отправлено: 09 Ноября, 2011 - 09:04:00
Post Id


Частый гость


Покинул форум
Сообщений всего: 137
Дата рег-ции: Сент. 2011  
Откуда: Los Angeles, California


Помог: 0 раз(а)




Привет,

Подскажите, мне надо что бы из базы брались 2 числа
из полей сумма и количество и считалось.
какие типы полей надо сделать?
у меня работает но если при добавление в базу числа 0,3 то он не считает
а если 0.3 то считает


Или как можно сделать что бы при внесение информации в базу если пользователь пишет цену 0,3 что б она конвертировалась в 0.3

?

Или там какую нить проверку простенькую

или если он вводит в поле то можно ли ограничить символами тоесть что б вводились только цыфры и точка в поле textarea


-----
This forum is vulnerable. I want to replace forum engine.
(c) OrmaJever
 
 Top
EuGen Администратор
Отправлено: 09 Ноября, 2011 - 09:14:19
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Конвертируйте значения в приложении. А лучше и считать там же (если это не агрегация). БД - не калькулятор.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Самогонщик
Отправлено: 09 Ноября, 2011 - 09:17:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




Проверку на серверной стороне того что ввёл пользователь нужно делать обязательно в любом случае. Можно проверять с помощью is_numeric, а потом до кучи проверять диапазон, формат и т.д.

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

Если считаете деньги, то формат ячейки точно не должен быть вещественным.
 
 Top
DlTA
Отправлено: 09 Ноября, 2011 - 11:04:19
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Самогонщик пишет:
Если считаете деньги, то формат ячейки точно не должен быть вещественным.

почему?
 
 Top
Самогонщик
Отправлено: 09 Ноября, 2011 - 11:10:00
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




DlTA пишет:
почему?
Потеря точности. Вещественные числа весьма примерно представляют дробную часть десятичных чисел, что приводит к весьма неприятным последствиям.
(Добавление)
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. $t = 0.2+0.1;
  3. $d = 0.3;
  4.  
  5. if ( $t==$d)
  6. echo "ololo";
  7. else
  8. echo "oh-lolo";
  9. ?>
 
 Top
DlTA
Отправлено: 09 Ноября, 2011 - 11:31:03
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Самогонщик пишет:
Потеря точности. Вещественные числа весьма примерно представляют дробную часть десятичных чисел, что приводит к весьма неприятным последствиям.

из этого могу сделать вывод что решением будет свой тип данных?
в котором целая часть будет храниться отдельно а дробная отдельно?

а как же использоание round
или Математические функции BCMath произвольной точности
 
 Top
caballero
Отправлено: 09 Ноября, 2011 - 11:36:53
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
из этого могу сделать вывод что решением будет свой тип данных?
в котором целая часть будет храниться отдельно а дробная отдельно?


от потери точности никакой тип данных не поможет если выполняете деление и умножение

а вообще хорошей практикой в финансовых программах является использовать целый тип, то есть вместо рублей считаете копейки - гораздо быстрее и точнгее обрабатывается сервером

а при выводе пользователю делите на 100 и форматируете строку с запятой


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Самогонщик
Отправлено: 09 Ноября, 2011 - 11:42:34
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




DlTA пишет:
из этого могу сделать вывод что решением будет свой тип данных?
Ни разу такого не имел введу.

DlTA пишет:
а как же использоание round
Я бы побоялся сначала получать косяки с точностью, а потом их исправлять. Особенно когда речь идёт о деньгах.

DlTA пишет:
или Математические функции BCMath произвольной точности
Не пользовался, нужно внимательно изучить как оно считает.

Я честно не знаю как пхп работать с деньгами, т.к. пхп свободно преобразует типы, например, при делении.
(Добавление)
caballero пишет:
а вообще хорошей практикой в финансовых программах является использовать целый тип, то есть вместо рублей считаете копейки - гораздо быстрее и точнгее обрабатывается сервером
В дот нете ещё есть тип Decimal, это вещественное представление числа в двоично-десятичной кодировки (э... как то оно называется). Т.е. все операции производятся как над десятичным числом и хранится в десятичном виде (не то пол байта на разряд, не то целый).
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB