Round, roundf, roundlround, roundf, roundl

Примечания

  1. Кнут Д. Э. Искусство программирования. Том 1. Основные алгоритмы = The Art of Computer Programming. Volume 1. Fundamental Algorithms / под ред. С. Г. Тригуб (гл. 1), Ю. Г. Гордиенко (гл. 2) и И. В. Красикова (разд. 2.5 и 2.6). — 3. — Москва: Вильямс, 2002. — Т. 1. — 720 с. — ISBN 5-8459-0080-8.
  2. A’HEARN, B., J. BATEN AND D. CRAYEN (2009). “Quantifying Quantitative Literacy: Age Heaping and the History of Human Capital”, Journal of Economic History 69,783-808.
  3. В. М. Заварыкин, В. Г. Житомирский, М. П. Лапчик. Техника вычислений и алгоритмизация: Вводный курс: Учебное пособие для студентов педагогических институтов по физико-математическим специальностям. — М: Просвещение, 1987. 160 с.: ил.
  4. цит. по В. Гильде, З. Альтрихтер. «С микрокалькулятором в руках». Издание второе. Перевод с немецкого Ю. А. Данилова. М:Мир, 1987, стр. 64.

Ошибки плавающей запятой

Дробные величины компьютер обычно трактует как числа с плавающей точкой. Аксессовские поля типов Двойной точности (Double) или Одинарной точности (Single) относятся к такому типу. Тип «Двойной точности» дает около 15 знаков точности, сингл — 8 знаков (подобно ручному калькулятору).

Но эти числа являются приблизительными. Точно так же, как 1/3 требует бесконечного количества знаков в десятичной системе, большинство чисел с плавающей запятой не могут быть представлены точно в двоичной системе. Википедия объясняет , с которой вы сталкиваетесь, оперируя числами с плавающей запятой.

Резюме заключается в том, что крайние цифры могут не округлиться ожидаемым вами образом,благодаря тому факту, что действительные значения и отображаемые не совпадают. Это становится особенно заметно при проверке банковского округления.

Один из способов избежать подобных проблем — использовать числа с фиксированной запятой или мастшабированные числа.Тип данных «Денежный» в Аксессе является типом с фиксированной запятой: он всегда хранит 4 десятичных знака.

Например, откройте окно Immediate Window (Ctrl+G) и введите:    ? Round(CCur(.545),2), Round(CDbl(.545),2) Денежный тип (первый) возвращает 0,54, тогда как Двойной точности — 0,55. Денежный округляет корректно (к четной цифре 4); тип с плавающей запятой (Двойной точности) некорректно. Подобным образом, если вы попробуете 8,995, Денежный корректно округлит вверх (к четной цифре 0), в то время как тип Двойной точности округлит вниз (неверно.)

Денежный тип справляется только с 4 десятичными знаками. Используйте масштабируемый тип Действительный (Decimal), если вам нужно больше знаков после запятой.

ПримерыExamples

A.A. Использование функции ROUND и приближенийUsing ROUND and estimates

Следующий пример показывает два выражения, которые демонстрируют, используя , что последний знак всегда является приближением.The following example shows two expressions that demonstrate by using the last digit is always an estimate.

Результирующий набор:Here is the result set.

В следующем примере показаны округление и аппроксимация.The following example shows rounding and approximations.

Результирующий набор:Here is the result set.

В.C. Использование функции ROUND для усеченияUsing ROUND to truncate

В следующем примере используются две инструкции для демонстрации различия между округлением и усечением.The following example uses two statements to demonstrate the difference between rounding and truncation. Первая инструкция округляет результат.The first statement rounds the result. Вторая инструкция усекает результат.The second statement truncates the result.

Результирующий набор:Here is the result set.

Как проверить, активирована ли Windows 10?

Применение функций

Если же вы хотите изменить величину округления при расчете относительно одной или нескольких ячеек, но не хотите понижать точность расчетов в целом для документа, то в этом случае, лучше всего воспользоваться возможностями, которые предоставляет функция «ОКРУГЛ», и различные её вариации, а также некоторые другие функции.

Среди основных функций, которые регулируют округление, следует выделить такие:

  • ОКРУГЛ – округляет до указанного числа десятичных знаков, согласно общепринятым правилам округления;
  • ОКРУГЛВВЕРХ – округляет до ближайшего числа вверх по модулю;
  • ОКРУГЛВНИЗ – округляет до ближайшего числа вниз по модулю;
  • ОКРУГЛТ – округляет число с заданной точностью;
  • ОКРВВЕРХ – округляет число с заданной точность вверх по модулю;
  • ОКРВНИЗ – округляет число вниз по модулю с заданной точностью;
  • ОТБР – округляет данные до целого числа;
  • ЧЕТН – округляет данные до ближайшего четного числа;
  • НЕЧЕТН – округляет данные до ближайшего нечетного числа.

Для функций ОКРУГЛ, ОКРУГЛВВЕРХ и ОКРУГЛВНИЗ следующий формат ввода: «Наименование функции (число;число_разрядов). То есть, если вы, например, хотите округлить число 2,56896 до трех разрядов, то применяете функцию ОКРУГЛ(2,56896;3). На выходе получается число 2,569.

Для функций ОКРУГЛТ, ОКРВВЕРХ и ОКРВНИЗ применяется такая формула округления: «Наименование функции(число;точность)». Например, чтобы округлить число 11 до ближайшего числа кратного 2, вводим функцию ОКРУГЛТ(11;2). На выходе получается число 12.

Функции ОТБР, ЧЕТН и НЕЧЕТ используют следующий формат: «Наименование функции(число)». Для того, чтобы округлить число 17 до ближайшего четного применяем функцию ЧЕТН(17). Получаем число 18.

Функцию можно вводить, как в ячейку, так и в строку функций, предварительно выделив ту ячейку, в которой она будет находиться. Перед каждой функцией нужно ставить знак «=».

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

Для этого, переходим во вкладку «Формулы». Кликаем по копке «Математические». Далее, в открывшемся списке выбираем нужную функцию, например ОКРУГЛ.

После этого, открывается окно аргументов функции. В поле «Число» можно ввести число вручную, но если мы хотим автоматически округлить данные всей таблицы, тогда кликаем по кнопке справа от окна введения данных.

Окно аргументов функции сворачивается. Теперь нужно кликнуть по самой верхней ячейке столбца, данные которого мы собираемся округлить. После того, как значение занесено в окно, кликаем по кнопке справа от этого значения.

Опять открывается окно аргументов функции. В поле «Число разрядов» записываем разрядность, до которой нам нужно сокращать дроби. После этого, жмем на кнопку «OK».

Как видим, число округлилось. Для того, чтобы таким же образом округлить и все другие данные нужного столбца, наводим курсор на нижний правый угол ячейки с округленным значением, жмем на левую кнопку мыши, и протягиваем её вниз до конца таблицы.

После этого, все значения в нужном столбце будут округлены.

Как видим, существуют два основных способа округлить видимое отображение числа: с помощью кнопки на ленте, и путем изменения параметров формата ячеек. Кроме того, можно изменить и округление реально рассчитываемых данных. Это также можно сделать двумя способами: изменением настроек книги в целом, или путем применения специальных функций. Выбор конкретного способа зависит от того, собираетесь ли вы применять подобный вид округления для всех данных в файле, или только для определенного диапазона ячеек.

Мы рады, что смогли помочь Вам в решении проблемы.

Помогла ли вам эта статья?

Да Нет

Округляют числа в Excel несколькими способами. С помощью формата ячеек и с помощью функций. Эти два способа следует различать так: первый только для отображения значений или вывода на печать, а второй способ еще и для вычислений и расчетов.

С помощью функций возможно точное округление, в большую или меньшую сторону, до заданного пользователем разряда. А полученные значения в результате вычислений, можно использовать в других формулах и функциях. В то же время округление с помощью формата ячеек не даст желаемого результата, и результаты вычислений с такими значениями будут ошибочны. Ведь формат ячеек, по сути, значение не меняет, меняется лишь его способ отображения. Чтобы в этом быстро и легко разобраться и не совершать ошибок, приведем несколько примеров.

Функции из библиотеки Math

Модуль необходим в Python. Он предоставляет пользователю широкий функционал работы с числами. Для обработки алгоритмов сначала проводят импорт модуля.

math.ceil

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

Любая дробь находится между двумя целыми числами. Например, 2.3 лежит между 2 и 3. Функция ceil() определяет большую сторону и возводит к нему результат преобразования. Например:

Алгоритм определяет большую границу интервала с учетом знака:

math.floor

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

При округлении учитывается знак перед данными.

math.trunc

Функция характеризуется отбрасыванием дробной части. После преобразования получается целое значение без учета дроби. Такой алгоритм не является округлением в арифметическом смысле. В Пайтон просто игнорируется дробь независимо от ее значения:

Избавиться от дроби можно без подключения модуля. Для этого есть стандартная функция Она преобразовывает дробные числа в целые путем игнорирования дроби.

Округление в большую сторону при условии в Excel

Пример 2. Балл за предмет в учебном заведении рассчитывается как среднее арифметическое баллов за 7 контрольных работ. При этом в пользу ученика округление в большую сторону выполняется в том случае, если дробная часть полученного числа >= 0,8. Определить оценку для ученика (используется 10-бальная шкала оценки знаний).

Исходные данные:

Формула для расчета:

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

Результат вычислений:

Ученик не получил «прибавку» к оценке, поскольку средний балл за контрольные составил 7,71 (0,71<0,8).

Варианты округления 0,5 к ближайшему целому

Отдельного описания требуют правила округления для специального случая, когда (N+1)-й знак = 5, а последующие знаки равны нулю. Если во всех остальных случаях округление до ближайшего целого обеспечивает меньшую погрешность округления, то данный частный случай характерен тем, что для однократного округления формально безразлично, производить его «вверх» или «вниз» — в обоих случаях вносится погрешность ровно в 1/2 младшего разряда. Существуют следующие варианты правила округления до ближайшего целого для данного случая:

  • Математическое округление — округление всегда в бо́льшую по модулю сторону (предыдущий разряд всегда увеличивается на единицу).
  • Банковское округление (англ. banker’s rounding) — округление для этого случая происходит к ближайшему чётному, то есть 2,5 → 2; 3,5 → 4.
  • Случайное округление — округление происходит в меньшую или большую сторону в случайном порядке, но с равной вероятностью (может использоваться в статистике). Также часто используется округление с неравными вероятностями (вероятность округления вверх равна дробной части), этот способ делает накопление ошибок случайной величиной с нулевым математическим ожиданием.
  • Чередующееся округление — округление происходит в меньшую или большую сторону поочерёдно.

Во всех вариантах в случае, когда (N+1)-й знак не равен 5 или последующие знаки не равны нулю, округление происходит по обычным правилам: 2,49 → 2; 2,51 → 3.

Математическое округление просто формально соответствует общему правилу округления (см. выше). Его недостатком является то, что при округлении большого числа значений, которые далее будут обрабатываться совместно, может происходить накопление ошибки округления. Типичный пример: округление до целых рублей денежных сумм, выражаемых в рублях и копейках. В реестре из 10 000 строк (если считать копеечную часть каждой суммы случайным числом с равномерным распределением, что обычно вполне допустимо) окажется в среднем около 100 строк с суммами, содержащими в части копеек значение 50. При округлении всех таких строк по правилам математического округления «вверх» сумма «итого» по округлённому реестру окажется на 50 рублей больше точной.

Три остальных варианта как раз и придуманы для того, чтобы уменьшить общую погрешность суммы при округлении большого количества значений. Округление «до ближайшего чётного» исходит из предположения, что при большом числе округляемых значений, имеющих 0,5 в округляемом остатке, в среднем половина из них окажется слева, а половина — справа от ближайшего чётного, таким образом, ошибки округления взаимно погасятся. Строго говоря, предположение это верно лишь тогда, когда набор округляемых чисел обладает свойствами случайного ряда, что обычно верно в бухгалтерских приложениях, где речь идёт о ценах, суммах на счетах и так далее. Если же предположение будет нарушено, то и округление «до чётного» может приводить к систематическим ошибкам. Для таких случаев лучше работают два следующих метода.

Два последних варианта округления гарантируют, что примерно половина специальных значений будет округлена в одну сторону, половина — в другую. Но реализация таких методов на практике требует дополнительных усилий по организации вычислительного процесса.

  • Округление в случайную сторону требует для каждой округляемой строки генерировать случайное число. При использовании псевдослучайных чисел, создаваемых линейным реккурентным методом, для генерации каждого числа требуется операция умножения, сложения и деления по модулю, что для больших объёмов данных может существенно замедлить расчёты.
  • Чередующееся округление требует хранить флаг, показывающий, в какую сторону последний раз округлялось специальное значение, и при каждой операции переключать значение этого флага.

Обозначения

Операция округления числа x к большему (вверх) обозначается следующим образом: ⌈x⌉{\displaystyle \lceil x\rceil }. Аналогично, округление к меньшему (вниз) обозначается ⌊x⌋{\displaystyle \lfloor x\rfloor }. Эти символы (а также английские названия для этих операций — соответственно, ceiling и floor, досл. «потолок» и «пол») были введеныК. Айверсоном в его работе A Programming Language, описавшей систему математических обозначений, позже развившуюся в язык программирования APL. Айверсоновские обозначения операций округления были популяризированы Д. Кнутом в его книге «Искусство программирования».

По аналогии, округление к ближайшему целому часто обозначают как x{\displaystyle \left}. В некоторых прежних и современных (вплоть до конца XX века) работах так обозначалось округление к меньшему; такое использование этого обозначения восходит ещё к работе Гаусса 1808 года (третье его доказательство квадратичного закона взаимности). Кроме того, это же обозначение используется (с другим значением) в нотации Айверсона.

В стандарте Юникод зафиксированы следующие символы:

Названиев Юникоде Код в Юникоде Вид Мнемоникав HTML 4 Примечания
16-ричный десятичный
LEFT CEILING (тж. APL upstile) 2308 8968 &lceil; не путать с:

  • U+2E22 ⸢ — Top left half bracket
  • U+300C 「 — Left corner bracket
RIGHT CEILING 2309 8969 &rceil; не путать с:

  • U+20E7 ◌⃧ — Combining annuity symbol
  • U+2E23 ⸣ — Top right half bracket
LEFT FLOOR (тж. APL downstile) 230A 8970 &lfloor; не путать с:
RIGHT FLOOR 230B 8971 &rfloor; не путать с:

  • U+2E25 ⸥ — Bottom right half bracket
  • U+300D 」 — Right corner bracket

Проверка: isFinite и isNaN

Помните эти специальные числовые значения?

  • (и ) — особенное численное значение, которое ведёт себя в точности как математическая бесконечность ∞.
  • представляет ошибку.

Эти числовые значения принадлежат типу , но они не являются «обычными» числами, поэтому есть функции для их проверки:

  • преобразует значение в число и проверяет является ли оно :

    Нужна ли нам эта функция? Разве не можем ли мы просто сравнить ? К сожалению, нет. Значение уникально тем, что оно не является равным ни чему другому, даже самому себе:

  • преобразует аргумент в число и возвращает , если оно является обычным числом, т.е. не :

Иногда используется для проверки, содержится ли в строке число:

Помните, что пустая строка интерпретируется как во всех числовых функциях, включая.

Сравнение

Существует специальный метод Object.is, который сравнивает значения примерно как , но более надёжен в двух особых ситуациях:

  1. Работает с : , здесь он хорош.
  2. Значения и разные: , это редко используется, но технически эти значения разные.

Во всех других случаях идентичен .

Этот способ сравнения часто используется в спецификации JavaScript. Когда внутреннему алгоритму необходимо сравнить 2 значения на предмет точного совпадения, он использует (Определение ).

Комментарии

Поведение этого метода соответствует стандарту IEEE 754, разделу 4.The behavior of this method follows IEEE Standard 754, section 4. Этот тип округления иногда называют округлением в сторону отрицательной бесконечности.This kind of rounding is sometimes called rounding toward negative infinity.

Floor(Double)

Возвращает наибольшее целое число, которое меньше или равно заданному числу с плавающей запятой двойной точности.Returns the largest integral value less than or equal to the specified double-precision floating-point number.

d

Double

Число двойной точности с плавающей запятой.A double-precision floating-point number.

Возвращаемое значение

Double

Наибольшее целое число, которое меньше или равно .The largest integral value less than or equal to . Если значение параметра равно NaN, NegativeInfinity или PositiveInfinity, возвращается это значение.If is equal to NaN, NegativeInfinity, or PositiveInfinity, that value is returned.

Примеры

В следующем примере показан метод и его отличие от метода.The following example illustrates the method and contrasts it with the method.

Комментарии

Поведение этого метода соответствует стандарту IEEE 754, разделу 4.The behavior of this method follows IEEE Standard 754, section 4. Этот тип округления иногда называют округлением в сторону отрицательной бесконечности.This kind of rounding is sometimes called rounding toward negative infinity. Иными словами, если является положительным, любой дробный компонент усекается.In other words, if is positive, any fractional component is truncated. Если имеет отрицательное значение, присутствие любого компонента дробной части приводит к округлению его до меньшего целого числа.If is negative, the presence of any fractional component causes it to be rounded to the smaller integer. Операция этого метода отличается от Ceiling метода, который поддерживает округление в сторону положительной бесконечности.The operation of this method differs from the Ceiling method, which supports rounding toward positive infinity.

Начиная с Visual Basic 15,8, производительность преобразования типа «двойное в целое число» оптимизирована, если передать значение, возвращаемое методом, в любую функцию целочисленного преобразованияили если значение Double, возвращаемое, автоматически преобразуется в целое число с параметром Option-on , равным OFF.Starting with Visual Basic 15.8, the performance of Double-to-integer conversion is optimized if you pass the value returned by the method to the any of the integral conversion functions, or if the Double value returned by is automatically converted to an integer with Option Strict set to Off. Эта оптимизация позволяет коду выполняться быстрее — до двух раз быстрее для кода, который выполняет большое количество преобразований в целочисленные типы.This optimization allows code to run faster — up to twice as fast for code that does a large number of conversions to integer types. В следующем примере показаны оптимизированные преобразования:The following example illustrates such optimized conversions:

Неточные вычисления

Внутри JavaScript число представлено в виде 64-битного формата IEEE-754. Для хранения числа используется 64 бита: 52 из них используется для хранения цифр, 11 из них для хранения положения десятичной точки (если число целое, то хранится 0), и один бит отведён на хранение знака.

Если число слишком большое, оно переполнит 64-битное хранилище, JavaScript вернёт бесконечность:

Наиболее часто встречающаяся ошибка при работе с числами в JavaScript – это потеря точности.

Посмотрите на это (неверное!) сравнение:

Да-да, сумма и не равна .

Странно! Что тогда, если не ?

Но почему это происходит?

Число хранится в памяти в бинарной форме, как последовательность бит – единиц и нулей. Но дроби, такие как , , которые выглядят довольно просто в десятичной системе счисления, на самом деле являются бесконечной дробью в двоичной форме.

Другими словами, что такое ? Это единица делённая на десять — , одна десятая. В десятичной системе счисления такие числа легко представимы, по сравнению с одной третьей: , которая становится бесконечной дробью .

Деление на гарантированно хорошо работает в десятичной системе, но деление на – нет. По той же причине и в двоичной системе счисления, деление на обязательно сработает, а становится бесконечной дробью.

В JavaScript нет возможности для хранения точных значений 0.1 или 0.2, используя двоичную систему, точно также, как нет возможности хранить одну третью в десятичной системе счисления.

Числовой формат IEEE-754 решает эту проблему путём округления до ближайшего возможного числа. Правила округления обычно не позволяют нам увидеть эту «крошечную потерю точности», но она существует.

Пример:

И когда мы суммируем 2 числа, их «неточности» тоже суммируются.

Вот почему – это не совсем .

Не только в JavaScript

Справедливости ради заметим, что ошибка в точности вычислений для чисел с плавающей точкой сохраняется в любом другом языке, где используется формат IEEE 754, включая PHP, Java, C, Perl, Ruby.

Можно ли обойти проблему? Конечно, наиболее надёжный способ — это округлить результат используя метод toFixed(n):

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

Таким образом, метод умножения/деления уменьшает погрешность, но полностью её не решает.

Забавный пример

Попробуйте выполнить его:

Причина та же – потеря точности. Из 64 бит, отведённых на число, сами цифры числа занимают до 52 бит, остальные 11 бит хранят позицию десятичной точки и один бит – знак. Так что если 52 бит не хватает на цифры, то при записи пропадут младшие разряды.

Интерпретатор не выдаст ошибку, но в результате получится «не совсем то число», что мы и видим в примере выше. Как говорится: «как смог, так записал».

Два нуля

Другим забавным следствием внутреннего представления чисел является наличие двух нулей: и .

Все потому, что знак представлен отдельным битом, так что, любое число может быть положительным и отрицательным, включая нуль.

В большинстве случаев это поведение незаметно, так как операторы в JavaScript воспринимают их одинаковыми.

Применения

Округление используется для того, чтобы работать с числами в пределах того количества знаков, которое соответствует реальной точности параметров вычислений (если эти значения представляют собой измеренные тем или иным образом реальные величины), реально достижимой точности вычислений либо желаемой точности результата. В прошлом округление промежуточных значений и результата имело прикладное значение (так как при расчётах на бумаге или с помощью примитивных устройств типа абака учёт лишних десятичных знаков может серьёзно увеличить объём работы). Сейчас оно остаётся элементом научной и инженерной культуры. В бухгалтерских приложениях, кроме того, использование округлений, в том числе промежуточных, может требоваться для защиты от вычислительных ошибок, связанных с конечной разрядностью вычислительных устройств.

Более того, некоторые исследования используют округления возраста для измерения числовой грамотности. Это связано с фактом, что менее образованные люди склонны округлять свой возраст вместо того, что бы указывать точный. Например, в официальных записях населения с более низким уровнем человеческого капитала чаще встречается возраст 30, чем 31 или 29.

ПримерыExamples

A.A. Использование функции ROUND и приближенийUsing ROUND and estimates

Следующий пример показывает два выражения, которые демонстрируют, используя , что последний знак всегда является приближением.The following example shows two expressions that demonstrate by using the last digit is always an estimate.

Результирующий набор:Here is the result set.

В следующем примере показаны округление и аппроксимация.The following example shows rounding and approximations.

Результирующий набор:Here is the result set.

В.C. Использование функции ROUND для усеченияUsing ROUND to truncate

В следующем примере используются две инструкции для демонстрации различия между округлением и усечением.The following example uses two statements to demonstrate the difference between rounding and truncation. Первая инструкция округляет результат.The first statement rounds the result. Вторая инструкция усекает результат.The second statement truncates the result.

Результирующий набор:Here is the result set.

Округление дат и времени

Обратите внимание, что тип Дата/Время в Аксессе является особым видом типа с плавающей запятой, в котором дробная часть обозначает время дня. Следовательно, поля типа Дата/Время с компонентой времени также подвержены ошибкам округления

Функция ниже округляет дату/время до указанного количества секунд. Например, чтобы округлить до ближайшего получаса (30 * 60 seconds), используйте:     =RoundTime(, 1800)

Public Function RoundTime(varTime As Variant, Optional ByVal lngSeconds As Long = 900&) As Variant    'Цель:   Округлить величину дата/время до ближайшего количества указанных секунд      'Аргументы: varTime = величина дата/время      '           lngSeconds = количество секунд, до которых требуется округлить.      '               напр.  60 для ближайшей минуты,      '                    600 для ближайших 10 минут,      '                   3600 для ближайшего часа,      '                  86400 до следующего дня.      'Возвращает:    Округленное значение дата/время либо Null, если не было входного аргумента дата/время.      'Примечание:      lngSeconds должно быть между 1 и 86400.      '           Округляет по умолчанию до ближайших 15 minutes.      Dim lngSecondsOffset As Long            RoundTime = Null        'Инициализируем возвращаемый Null.      If Not IsError(varTime) Then          If IsDate(varTime) Then              If (lngSeconds < 1&) Or (lngSeconds > 86400) Then                  lngSeconds = 1&              End If              lngSecondsOffset = lngSeconds * CLng(DateDiff("s", #12:00:00 AM#, TimeValue(varTime)) / lngSeconds)              RoundTime = DateAdd("s", lngSecondsOffset, DateValue(varTime))          End If      End If  End Function

Общий порядок округления и терминология

  • Округление числа, записанного в позиционной системе счисления с M знаками дробной части, может производиться «до K-го знака после запятой», где K ≤ M. При таком округлении в записи числа отбрасываются справа (M-K) значащих цифр, а K-я цифра после запятой может измениться (см. ). Применяется также терминология с указанием единицы наименьшей десятичной доли, сохраняющейся у округлённого числа, то есть «округление до десятых», «…до сотых», «…до тысячных» и т. д. (соответствует округлению до одного, двух, трёх и так далее знаков после запятой). Частный случай, когда K=0, называется «округлением до целого».
  • Когда при округлении отбрасываются значащие цифры целой части числа, говорят об «округлении до десятков» (сотен, тысяч и так далее), отбрасывая, соответственно, один, два, три и более знака. При таком округлении отбрасываемые цифры целой части числа заменяются на нули.
  • Для чисел, представленных в нормализованном виде, говорят об «округлении до K (значащих) цифр». При этом мантисса числа сохраняет K значащих цифр, остальные цифры справа отбрасываются.

Округлить до 1000 руб.

Функция Round() в Excel принимает отрицательные числа в качестве количества мест от запятой, напр. Round(123456, -3) округляет до 1000. К сожалению, аксессовская функция этого не поддерживает.

Чтобы округлить до ближайших 1000 руб., разделите на 1000, округлите, и умножьте на 1000. Пример:    1000 * Round( / 1000, 0)

Чтобы округлить до 1000 руб. вниз, разделите на 1000, получите целое число и умножьте на 1000. Пример:    1000 * Int( / 1000)

Чтобы округлить до верхней 1000 руб., разделите на 1000 и умножьте на -1 перед получением целой величины. Пример:    -1000 * Int( / -1000)

Чтобы округлить в сторону нуля, используйте Fix() вместо Int().

Альтернативно, пользовательская функция Кена Гетца ведет себя в точности как упомнутая экселевская функция.

parseInt и parseFloat

Для явного преобразования к числу можно использовать или . Если строка не является в точности числом, то результат будет :

Единственное исключение — это пробелы в начале строки и в конце, они игнорируются.

В реальной жизни мы часто сталкиваемся со значениями у которых есть единица измерения, например или в CSS. Также во множестве стран символ валюты записывается после номинала . Так как нам получить числовое значение из таких строк?

Для этого есть и .

Они «читают» число из строки. Если в процессе чтения возникает ошибка, они возвращают полученное до ошибки число. Функция возвращает целое число, а возвращает число с плавающей точкой:

Функции вернут , если не смогли прочитать ни одну цифру:

Второй аргумент

Функция имеет необязательный второй параметр. Он определяет систему счисления, таким образом может также читать строки с шестнадцатеричными числами, двоичными числами и т.д.:

1 Округление вещественных чисел

Как мы уже разбирали, при присваивании переменной типа вещественного числа оно всегда округляется вниз до целого — его дробная часть просто отбрасывается.

А ведь легко можно представить ситуацию, когда дробное число нужно округлить просто до ближайшего целого или вообще вверх. Что делать в этой ситуации?

Для этого и для многих похожих случаев в Java есть класс , у которого есть методы , , .

Метод

Метод округляет число до ближайшего целого:

Но, как говорится, есть нюанс: результат работы этого метода — целочисленный тип (не ). Вещественные числа ведь могут быть очень большими, поэтому разработчики Java решили использовать самый большой целочисленный тип, который есть в Java — .

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

Примеры:

Команда Результат

Метод

Метод округляет число до целого вверх, примеры:

Команда Результат

Метод

Метод округляет число до целого вниз, примеры:

Команда Результат

Хотя, для округления числа до целого вниз, будет проще использовать просто оператор приведения типа — :

Команда Результат

Если вам сложно запомнить эти команды, вам поможет небольшой урок английского:

  • — математика
  • — круг/округлять
  • — потолок
  • — пол
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector