Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Управление точностью числовых данных

Старшинство операций с множествами | Gt; SELECT cust_id _> FROM account | Упражнения | Строковые данные | Создание строк | Специальные символы | Работа со строками | Gt; LENGTH(vchar_fld) varchar_length, _> LENGTH(text_fld) text_length | Gt; FROM string_tbl | Строковые функции, возвращающие строки |


Читайте также:
  1. Amp;НЕВЕРБАЛЬНОЕ УПРАВЛЕНИЕ
  2. G. ТРАНСГРАНИЧНОЕ УПРАВЛЕНИЕ - Международное сотрудничество; 1 млн. долл. США; 2-10 лет
  3. IX. Управление библиотечной деятельностью
  4. Remote win desktop. Удаленное управление ПК
  5. V 2. Административные правонарушения и административная ответственность в сфере таможенного дела. Государственное управление внешнеэкономической деятельностью и таможенным делом.
  6. V. Права человека, демократия и благое управление
  7. V. УПРАВЛЕНИЕ ПРОЕКТОМ

 

Числа с плавающей точкой не всегда обязаны взаимодействовать или отображаться полностью. Например, можно хранить данные о денеж_ ных операциях с точностью до шести десятичных разрядов, но при отображении округлять их до сотых. Для ограничения точности чисел с плавающей точкой предназначены четыре функции – ceil(), floor(), round() и truncate(). Все три сервера включают эти функции, только Oracle Database использует trunc() вместо truncate(), а SQL Server – ceiling() вместо ceil().

 

Функции ceil() (потолок) и floor() (пол) предназначены для округле_ ния вверх или вниз до ближайшего целого, как показано в следующем примере:

 

mysql> SELECT CEIL(72.445), FLOOR(72.445);

 

+______________+_______________+

 

| CEIL(72.445) | FLOOR(72.445) |

 

+______________+_______________+

 

| 73 | 72 |

 

+______________+_______________+

 

1 row in set (0.06 sec)

 

Как видите, любое число в диапазоне между 72 и 73 округляется до 73 (функция ceil()) или до 72 (функция floor()). Необходимо помнить, что ceil() округлит до 73, даже если десятичная часть числа очень ма_ ла, и floor() округлит до 72, даже если десятичная часть достаточно велика:

 

mysql> SELECT CEIL(72.000000001), FLOOR(72.999999999);

 

+____________________+_____________________+

 

| CEIL(72.000000001) | FLOOR(72.999999999) |

 

+____________________+_____________________+

 

| 73 | 72 |

 

+____________________+_____________________+

 

1 row in set (0.00 sec)

 

Если предыдущие функции предлагают округления, слишком грубые для приложения, можно использовать функцию round() (округлить). Она округляет в большую или меньшую сторону от середины проме_ жутка между двумя целыми, например:


 

138 Глава 7. Создание, преобразование и работа с данными

mysql> SELECT ROUND(72.49999), ROUND(72.5), ROUND(72.50001);

 

+_________________+_____________+_________________+ | ROUND(72.49999) | ROUND(72.5) | ROUND(72.50001) | +_________________+_____________+_________________+

| 72 | 72 | 73 |

 

+_________________+_____________+_________________+ 1 row in set (0.00 sec)

 

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

 

Чаще всего требуется не округлять число до ближайшего целого, а со_ хранить, по крайней мере, несколько разрядов его десятичной части. Функция round() допускает необязательный второй аргумент, задаю_ щий число разрядов справа от десятичной точки, до которого прово_ дится округление. Следующий пример показывает, как можно ис_ пользовать второй аргумент для округления числа 72,0909 до первого, второго и третьего десятичного знака:

 

mysql> SELECT ROUND(72.0909, 1), ROUND(72.0909, 2), ROUND(72.0909, 3);

 

+___________________+___________________+___________________+ | ROUND(72.0909, 1) | ROUND(72.0909, 2) | ROUND(72.0909, 3) | +___________________+___________________+___________________+

| 72.1 | 72.09 | 72.091 |

 

+___________________+___________________+___________________+ 1 row in set (0.00 sec)

 

Как и функция round(), функция truncate() допускает необязательный второй аргумент, задающий число разрядов справа от десятичной точ_ ки, при этом truncate() просто отбрасывает лишние разряды без округ_ ления. Пример показывает, как было бы усечено число 72,0909 до од_ ного, двух и трех десятичных знаков:

 

mysql> SELECT TRUNCATE(72.0909, 1), TRUNCATE(72.0909, 2),

_> TRUNCATE(72.0909, 3);

 

+______________________+______________________+______________________+ | TRUNCATE(72.0909, 1) | TRUNCATE(72.0909, 2) | TRUNCATE(72.0909, 3) | +______________________+______________________+______________________+

| 72.0 | 72.09 | 72.090 |

 

+______________________+______________________+______________________+ 1 row in set (0.00 sec)

В SQL Server нет функции truncate(). Ее роль играет функция round(), допуская третий необязательный аргумент; если он при_ сутствует и отличен от нуля, выполняется усечение, а не округ_ ление числа.


 

Обе функции, truncate() и round(), также допускают отрицательное зна_ чение второго аргумента, означающее усечение или округление числа


 

Числовые данные  
   

 

слева от десятичной точки. На первый взгляд эта возможность может показаться странной, но для ее наличия есть веские основания. Напри_ мер, есть продукт, закупка которого возможна только в количестве, пропорциональном десяти. Если покупатель закажет 17 единиц, то из_ менить заказанное количество можно одним из следующих способов:

 

mysql> SELECT ROUND(17, _1), TRUNCATE(17, _1);

 

+_______________+__________________+ | ROUND(17, _1) | TRUNCATE(17, _1) | +_______________+__________________+

 

| 20 | 10 |

 

+_______________+__________________+ 1 row in set (0.00 sec)

 

Если рассматриваемый продукт – канцелярские кнопки, то, скорее всего, итоговая сумма не сильно зависит от того, продано 10 или 20 штук при запрошенных 17; однако если речь идет о часах Rolex, для процветания бизнеса лучше будет округлять.

 


Дата добавления: 2015-08-17; просмотров: 52 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Выполнение арифметических операций| Обработка данных со знаком

mybiblioteka.su - 2015-2024 год. (0.011 сек.)