Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: MySQL: Чем отличаются друг от друга числовые типы данных float, decimal и double?
 
 автор: Богданн   (15.06.2011 в 18:31)   письмо автору
 
 

Ковыраясь в типах данных наткнулся на вопрос
как разница между Float,decimal и double??

  Ответить  
 
 автор: cheops   (15.06.2011 в 18:52)   письмо автору
 
   для: Богданн   (15.06.2011 в 18:31)
 

FLOAT занимает один байт и представляет числа от -3.402823466E+38 до -1.175494351E-38, DOUBLE занимает два байта и представляет числа от -1.7976931348623157E+308 to -2.2250738585072014E-308 (т.е. диапазон почти на 10 порядков больше). Но это обычные приближенные числа, т.е. при вычислениях будет накапливаться ошибка вычисления, так как числа представлены моделью. Если нужно, чтобы дробное число было точным, то его хранят не в виде модели, а строке DECIMAL - операции с такими числами проходят медленнее, зато ничего не теряется и не накапливается лишнего, что например, при работе с деньгами очень важно - пусть хоть пол часа вычисляется, но зато точно.

  Ответить  
 
 автор: Богданн   (15.06.2011 в 19:37)   письмо автору
 
   для: cheops   (15.06.2011 в 18:52)
 

спасибо, кажись доехало

  Ответить  
 
 автор: Богданн   (15.06.2011 в 20:38)   письмо автору
 
   для: cheops   (15.06.2011 в 18:52)
 

Создал таблицу с 2 столбцами первый определил как float(5,2) второй как decimal(5,2),ввел значения в оба столбца 3.999 в обоих округлило до 4,разве в decimal не должен был оставить 3.99??

  Ответить  
 
 автор: cheops   (15.06.2011 в 22:26)   письмо автору
 
   для: Богданн   (15.06.2011 в 20:38)
 

Нет, он либо оставит 3.999, если будет decimal(6,3), либо округлит до того знака, который вы указали. Ведь деньги расчитываются рублями и копейками - их округляют по совершенно определенным правилам, здесь тоже самое - этот тип следует рассматривать как денежный, в нем все сделано для удобства денежных расчетов. А вот если вы будете оперировать float (складывать, вычитать), то очень ского заметите, что у вас там находится не 4, а 4.000000057 или 3.9999999934 или еще что-то в этом духе - вот это не удобно. В decimal таких хвостов не будет.

PS В финансах, как правило, оперируют 4 знаками после запятой, сотой копейки обычно хватает, чтобы все расчеты были справедливыми.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования