Как в vba округлить число до 2 знаков после запятой
Перейти к содержимому

Как в vba округлить число до 2 знаков после запятой

  • автор:

Круглая функция

Возвращает число, округленное до указанного количества десятичных разрядов.

Синтаксис

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

Добавить комментарий

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