Круглая функция
Возвращает число, округленное до указанного количества десятичных разрядов.
Синтаксис
Round(expression, [ numdecimalplaces ])
Синтаксис функции Round содержит следующие элементы:
| Part | Описание |
|---|---|
| выражение | Обязательно. Числовое выражение, которое округляется. |
| numdecimalplaces | Необязательный параметр. Число, которое указывает, сколько разрядов должно быть после округления. Если этот элемент пропущен, функция Round возвращает целые числа. |
Эта функция VBA возвращает то, что обычно называется округлением банкиров. Поэтому будьте осторожны, прежде чем использовать эту функцию. Чтобы получить более предсказуемые результаты, используйте функции «Циклический лист» в Excel VBA.
Пример
?Round(0.12335,4) 0,1234 ?Round(0.12345,4) 0,1234 ?Round(0.12355,4) 0,1236 ?Round(0.12365,4) 0,1236 ?WorksheetFunction.Round(0.12345,4) 0,1235 ?WorksheetFunction.RoundUp(0.12345,4) 0,1235 ?WorksheetFunction.RoundDown(0.12345,4) 0,1234 ?Round(0.00005,4) 0 ?WorksheetFunction.Round(0.00005,4) 0,0001 ?WorksheetFunction.RoundUp(0.00005,4) 0,0001 ?WorksheetFunction.RoundDown(0.00005,4) 0
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Обратная связь
Были ли сведения на этой странице полезными?
Функции VBA для работы с числовыми значениями
Однако Round может вернуть не совсем ожидаемый результат, т.к. функция применяет финансовое округление. По правилам данного округления если за последней к округлению цифрой стоит 5, то округляемую цифру увеличивают в том случае, если она нечетная и уменьшают, если четная.
Математическое же округление всегда округляет цифру в большую сторону, если за ней идет цифра 5 и выше, и отбрасывает остаток если 4 и меньше.
Т.е. если мы выполним такую строку кода
MsgBox Round(2.505, 2)
MsgBox Round(2.505, 2)
то результатом будет 2,5 , хотя предполагалось получить 2,51 . Поэтому порой для округления лучше использовать Format :
MsgBox Format(2.505, "#,##0.00")
MsgBox Format(2.505, «#,##0.00»)
но в этом случае мы получим не число в чистом виде, а текст. И если нужно именно число, то придется производить дополнительные преобразования:
MsgBox CDbl(Format(2.505, "#,##0.00"))
MsgBox CDbl(Format(2.505, «#,##0.00»))
Так же, для математического округления, можно использовать и такой вариант:
MsgBox Application.Round(2.505, 2)
MsgBox Application.Round(2.505, 2)
Dim lRundNum As Long, lMinNum As Long, lMaxNum As Long lMinNum = 1: lMaxNum = 100 Randomize lRundNum = Int(lMinNum + (Rnd() * lMaxNum)) MsgBox lRundNum
Dim lRundNum As Long, lMinNum As Long, lMaxNum As Long lMinNum = 1: lMaxNum = 100 Randomize lRundNum = Int(lMinNum + (Rnd() * lMaxNum)) MsgBox lRundNum
Как в VBA указать количество цифр после запятой?
Пытаюсь сделать что бы после считывания значения из ячейки было определенное количество знаков после запятой у значения. Мне нужно что бы в Count было 2 знака после запятой всегда, а в WeightNetto и SummNetto что бы всегда выводило 3 знака после запятой, даже если там будут все нули, как это сделать?
Dim Count As Double Dim WeightNetto As Double Dim SummNetto As Double For i = 2 To LastRowOpenDbfSheet Count = Math.Round(CDbl(sheetOpenDbf.Cells(i, 12)), 2) // Попробовал так но не работает WeightNetto = CDbl(sheetOpenDbf.Cells(i, 19)) SummNetto = Count * WeightNetto
Отслеживать
задан 5 сен 2018 в 10:34
720 15 15 серебряных знаков 37 37 бронзовых знаков
Мне нужно что бы в Count было 2 знака после запятой всегда, а в WeightNetto и SummNetto что бы всегда выводило 3 знака после запятой Не перемешивайте ЗНАЧЕНИЕ и его ОТОБРАЖЕНИЕ. Это принципиально разные вещи, по-разному влияющие на результат. Определите ТОЧНО, что именно требуется.
5 сен 2018 в 11:10
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
В VBA оператор округления — Round
SummNetto = Round(Count * WeightNetto,3)
Для переменной этого достаточно и незначащие нули здесь роли не играют. Округлять не нужно, если требуется округлить только конечный результат.
На листе число тоже будет отображено без ведущих левых и лишних правых нулей (если не задан соответствующий формат ячейки). Для отображения с нулями нужно так и писать — покажите в формате. :
Cells(1,1).Value = Format(Count * WeightNetto,"0.000")
Как бы правильно, но не очень. Format приводит значение к текстовому формату. Правильнее не менять числа, а задать формат ячеек в которые выводятся данные (подготовить изначально или изменить макросом перед выводом результата),
Как в vba округлить число до 2 знаков после запятой
Если Вы скачали или приобрели надстройку PLEX для Microsoft Excel и у Вас есть вопросы или пожелания — Вам сюда.
Как обновить надстройку. (Пользователь Google) 22.12.2023 23:26:38
Оффтопьте на здоровье
Горячие клавиши для выз. (ZVI) 09.01.2024 13:23:00
Обсуждение функционала, правил и т.д.
Обновление количества п. (Jack Famous) 29.12.2023 10:33:06
Сейчас на форуме
Сегодня отмечают день рождения Eric Cartman ( 37 ), molekula ( 40 ), tuzvp ( 31 ), wildbill ( 32 ), yxybo ( 39 ), Максим Юрков ( 25 ), Савелий Доликов ( 29 )
Всего зарегистрированных пользователей: 130159
Приняло участие в обсуждении: 48056
Всего тем: 152326
Всего сообщений: 1198567
есть новые сообщения
нет новых сообщений
© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru
Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.
| ООО «Планета Эксел» ИНН 7735603520 ОГРН 1147746834949 |
ИП Павлов Николай Владимирович ИНН 633015842586 ОГРНИП 310633031600071 |