|
|
|
| Ковыраясь в типах данных наткнулся на вопрос
как разница между Float,decimal и double?? | |
|
|
|
|
|
|
|
для: Богданн
(15.06.2011 в 18:31)
| | FLOAT занимает один байт и представляет числа от -3.402823466E+38 до -1.175494351E-38, DOUBLE занимает два байта и представляет числа от -1.7976931348623157E+308 to -2.2250738585072014E-308 (т.е. диапазон почти на 10 порядков больше). Но это обычные приближенные числа, т.е. при вычислениях будет накапливаться ошибка вычисления, так как числа представлены моделью. Если нужно, чтобы дробное число было точным, то его хранят не в виде модели, а строке DECIMAL - операции с такими числами проходят медленнее, зато ничего не теряется и не накапливается лишнего, что например, при работе с деньгами очень важно - пусть хоть пол часа вычисляется, но зато точно. | |
|
|
|
|
|
|
|
для: cheops
(15.06.2011 в 18:52)
| | спасибо, кажись доехало | |
|
|
|
|
|
|
|
для: cheops
(15.06.2011 в 18:52)
| | Создал таблицу с 2 столбцами первый определил как float(5,2) второй как decimal(5,2),ввел значения в оба столбца 3.999 в обоих округлило до 4,разве в decimal не должен был оставить 3.99?? | |
|
|
|
|
|
|
|
для: Богданн
(15.06.2011 в 20:38)
| | Нет, он либо оставит 3.999, если будет decimal(6,3), либо округлит до того знака, который вы указали. Ведь деньги расчитываются рублями и копейками - их округляют по совершенно определенным правилам, здесь тоже самое - этот тип следует рассматривать как денежный, в нем все сделано для удобства денежных расчетов. А вот если вы будете оперировать float (складывать, вычитать), то очень ского заметите, что у вас там находится не 4, а 4.000000057 или 3.9999999934 или еще что-то в этом духе - вот это не удобно. В decimal таких хвостов не будет.
PS В финансах, как правило, оперируют 4 знаками после запятой, сотой копейки обычно хватает, чтобы все расчеты были справедливыми. | |
|
|
|