Возвращение целой части дробного десятичного числа с помощью функций Int и Fix в VBA Excel. Синтаксис, правила округления, примеры.
Int – это функция, которая удаляет дробную часть исходного числа и возвращает целое число меньшее или равное исходному числу.
Синтаксис:
Функция Fix
Fix – это функция, которая удаляет дробную часть исходного числа и возвращает, если число положительное, целое число меньшее или равное исходному числу или, если число отрицательное, целое число большее или равное исходному числу.
Другими словами, функция Fix просто отбрасывает дробную часть исходного числа, возвращая целую часть без каких-либо преобразований (смотрите примеры).
Синтаксис:
Примеры
Сходство и различие функций Int и Fix на примерах:
MsgBox Int(9.1) ‘Результат: 9 MsgBox Fix(9.1) ‘Результат: 9 MsgBox Int(9.9) ‘Результат: 9 MsgBox Fix(9.9) ‘Результат: 9 MsgBox Int(—9.1) ‘Результат: -10 MsgBox Fix(—9.1) ‘Результат: -9 MsgBox Int(—9.9) ‘Результат: -10 MsgBox Fix(—9.9) ‘Результат: -9 |
1 / 1 / 0 Регистрация: 08.09.2017 Сообщений: 391 |
|
1 |
|
Excel Выделение дробной части30.12.2020, 23:24. Показов 6570. Ответов 23
Всем привет!
0 |
370 / 268 / 93 Регистрация: 18.11.2015 Сообщений: 990 |
|
30.12.2020, 23:32 |
2 |
0 |
1 / 1 / 0 Регистрация: 08.09.2017 Сообщений: 391 |
|
30.12.2020, 23:36 [ТС] |
3 |
ArtNord, что есть a, и что есть f? Из исходных данных по сути только одно число.
0 |
ArtNord 370 / 268 / 93 Регистрация: 18.11.2015 Сообщений: 990 |
||||
30.12.2020, 23:39 |
4 |
|||
Это переменные
0 |
1 / 1 / 0 Регистрация: 08.09.2017 Сообщений: 391 |
|
30.12.2020, 23:41 [ТС] |
5 |
ArtNord, суть в том, что, допустим есть a = 0,153 и нужно из этого числа выцепить только 153 (дробную часть).
0 |
mobile 26777 / 14456 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
||||
30.12.2020, 23:41 |
6 |
|||
Нужно от нецелого числа отбросить целую часть и показывать только дробную. Например, число 0,153, нужно, чтобы показывалось 153. То есть противоположенное действие функции fix Пусть искомое число в переменной X. Или в какой-то ячейке. Неважно. Тогда мантиссу в виде целого числа можно найти так
0 |
370 / 268 / 93 Регистрация: 18.11.2015 Сообщений: 990 |
|
30.12.2020, 23:42 |
7 |
Тогда Код drob = CDbl(Mid(a, 3)) MsgBox drob
0 |
1 / 1 / 0 Регистрация: 08.09.2017 Сообщений: 391 |
|
30.12.2020, 23:44 [ТС] |
8 |
ArtNord, но количество знаков после запятой может быть любым.
0 |
370 / 268 / 93 Регистрация: 18.11.2015 Сообщений: 990 |
|
30.12.2020, 23:46 |
9 |
здесь 3 означает с какого символа брать цифры.
0 |
1 / 1 / 0 Регистрация: 08.09.2017 Сообщений: 391 |
|
30.12.2020, 23:46 [ТС] |
10 |
mobile, спасибо! Отлично работает, если в числе ноль целых. А вот с другими цифрами отображает некорректно…
0 |
ArtNord 370 / 268 / 93 Регистрация: 18.11.2015 Сообщений: 990 |
||||
30.12.2020, 23:47 |
11 |
|||
1 |
1 / 1 / 0 Регистрация: 08.09.2017 Сообщений: 391 |
|
30.12.2020, 23:48 [ТС] |
12 |
ArtNord, в таком случае прошу прощения
0 |
370 / 268 / 93 Регистрация: 18.11.2015 Сообщений: 990 |
|
30.12.2020, 23:51 |
13 |
Исправил
0 |
Narimanych 2630 / 1636 / 744 Регистрация: 23.03.2015 Сообщений: 5,142 |
||||
30.12.2020, 23:52 |
14 |
|||
Сообщение было отмечено mobile как решение РешениеBaykal555,
2 |
1 / 1 / 0 Регистрация: 08.09.2017 Сообщений: 391 |
|
30.12.2020, 23:55 [ТС] |
15 |
ArtNord, То что надо! Спасибо! Добавлено через 34 секунды
0 |
mobile 26777 / 14456 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
||||
30.12.2020, 23:58 |
16 |
|||
mobile, спасибо! Отлично работает, если в числе ноль целых. А вот с другими цифрами отображает некорректно… Проверяю в Immediate. У меня десятичный разделитель точка. Замените на запятую в instrrev
1 |
1 / 1 / 0 Регистрация: 08.09.2017 Сообщений: 391 |
|
31.12.2020, 00:09 [ТС] |
17 |
mobile, спасибо!
0 |
2630 / 1636 / 744 Регистрация: 23.03.2015 Сообщений: 5,142 |
|
31.12.2020, 00:11 |
18 |
mobile, С наступающим вас всех!
0 |
1 / 1 / 0 Регистрация: 08.09.2017 Сообщений: 391 |
|
31.12.2020, 00:14 [ТС] |
19 |
Narimanych, С наступающим! Всех благ!
0 |
370 / 268 / 93 Регистрация: 18.11.2015 Сообщений: 990 |
|
31.12.2020, 00:19 |
20 |
Всех с Наступающим!!!!
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
31.12.2020, 00:19 |
20 |
Главная » Функции VBA »
28 Апрель 2011 129148 просмотров
- ABS() — эта функция возвращает абсолютное значение переданного ей числа (то же число, но без знака). Например, ABS(3) и ABS(-3) вернут одно и то же значение 3.
- Int(), Fix() и Round()позволяют по разному округлять числа:
- Int() возвращает ближайшее меньшее целое;
- Fix() отбрасывает дробную часть;
- Round() округляет до указанного количества знаков после запятой.
Однако Round может вернуть не совсем ожидаемый результат, т.к. функция применяет финансовое округление. По правилам данного округления если за последней к округлению цифрой стоит 5, то округляемую цифру увеличивают в том случае, если она нечетная и уменьшают, если четная.
Математическое же округление всегда округляет цифру в большую сторону, если за ней идет цифра 5 и выше, и отбрасывает остаток если 4 и меньше.
Т.е. если мы выполним такую строку кодато результатом будет 2,5, хотя предполагалось получить 2,51. Поэтому порой для округления лучше использовать Format:
MsgBox Format(2.505, "#,##0.00")
но в этом случае мы получим не число в чистом виде, а текст. И если нужно именно число, то придется производить дополнительные преобразования:
MsgBox CDbl(Format(2.505, "#,##0.00"))
Так же, для математического округления, можно использовать и такой вариант:
MsgBox Application.Round(2.505, 2)
Но здесь стоит учитывать, что это не чистый VB и этот метод сработает только в Excel, т.к. по сути мы обращаемся к встроенной в Excel функции округления ОКРУГЛ(ROUND), которая применяет именно математическое округление.
- Rnd и команда Randomize используются для получения случайных значений (очень удобно для генерации имен файлов и в других ситуациях). Перед вызовом функции Rnd() необходимо выполнить команду Randomize для инициализации генератора случайных чисел.
Dim lRundNum As Long, lMinNum As Long, lMaxNum As Long lMinNum = 1: lMaxNum = 100 Randomize lRundNum = Int(lMinNum + (Rnd() * lMaxNum)) MsgBox lRundNum
- Sgn() — позволяет вернуть информацию о знаке числа. Возвращает 1, если число положительное, -1, если отрицательное и 0, если проверяемое число равно 0.
- Mod() — Делит два числа и возвращает только остаток. Например, выражение 8 Mod 3 вернет число 2, т.к. без остатка(в виде дроби у результата деления) 8 делится на 3 только до 2-х(8 / 3 = 2,66666666666667).
При этом функция Mod учитывает и знак числа — если первое число или оба числа отрицательные, то результатом будет отрицательное число. Если же отрицательное только второе число — то результат будет положительным числом.
При попытке получить остаток при делении чисел с плавающей запятой результат может быть не тем, который ожидается, потому что перед выполнением деления оба числа округляются по математическим законам(5 и выше до большего, 4 и ниже — до меньшего). Например, выражение 8 Mod 3.5 вернет 0, а выражение 8 Mod 3.4 — 2.
Функция Fix
Fix(Number)
Функция Fix(Fixed) отбрасывает дробную часть числа и возвращает целое значение. Функция схожа с функцией Int. Различие между функциями Int и Fix состоит в том, что для отрицательного значения аргумента число функция Int возвращает ближайшее отрицательное целое число, меньшее либо равное указанному, а Fix ближайшее отрицательное целое число, большее либо равное указанному. Например, функция Int преобразует -8.4 в -9, а функция Fix преобразует -8,4 в -8.
Выражение Fix(Number) эквивалентно следующему:
Sgn(Number) * Int(Abs(Number))
Возвращаемое значение
Функция возвращает значение типа, совпадающего с типом аргумента, которое содержит целую часть числа
Параметры
Number | Обязательный аргумент Number может представлять любое допустимое числовое выражение или число типа Double. Если аргумент имеет значение Null, то возвращается также Null |
Примечание
Если значение аргумента не попадает в диапазон допустимых значений Double, то генерируется ошибка стадии выполнения Overflow
Если аргумент имеет тип данных String, то он должен представлять собой число, иначе генерируется ошибка стадии выполнения Type mismastch
Пример
' В примере показано, ' как функции Int и Fix возвращают целые части чисел. ' В случае отрицательного аргумента Int возвращает ' ближайшее отрицательное целое число, ' меньшее либо равное указанному, ' а Fix ближайшее отрицательное целое число, ' большее либо равное указанному Dim MyNumber MyNumber = Int(99.8) ' Возвращает 99 MyNumber = Fix(99.2) ' Возвращает 99 MyNumber = Int(-99.8) ' Возвращает -100 MyNumber = Fix(-99.8) ' Возвращает -99 MyNumber = Int(-99.2) ' Возвращает -100 MyNumber = Fix(-99.2) ' Возвращает -99
Категория
Математические функцииМатематические функции
Содержание
- Числа
- Функции для работы с числами
- Математические функции
- Округление чисел
- Генерация псевдослучайных чисел
- Int, Fix functions
- Синтаксис
- Замечания
- Пример
- См. также
- Поддержка и обратная связь
- Функции VBA для работы с числовыми значениями
- Выделение целой и дробной части типа Double
- Сообщения 12
- #1 Тема от masha 12 октября 2006г. 15:55:18
- Тема: Выделение целой и дробной части типа Double
- #2 Ответ от masha 12 октября 2006г. 16:23:04
- Re: Выделение целой и дробной части типа Double
- #3 Ответ от Serj! 12 октября 2006г. 16:24:39
- Re: Выделение целой и дробной части типа Double
- #4 Ответ от Артём 12 октября 2006г. 16:26:16
- Re: Выделение целой и дробной части типа Double
- #5 Ответ от masha 12 октября 2006г. 16:40:03
- Re: Выделение целой и дробной части типа Double
Числа
Язык VBA поддерживает следующие числовые типы:
- Byte — целые числа от 0 до 255 . Занимает 1 байт;
- Integer — целые числа от -32 768 до 32 767 . Занимает 2 байта;
- Long — длинные целые числа. Диапазон значений от -2 147 483 648 до 2 147 483 647 . Занимает 4 байта;
- Single — вещественное число. Занимает 4 байта;
- Double — вещественное число двойной точности. Занимает 8 байт;
- Currency — числа с фиксированной точкой (четыре цифры после точки). Тип используется для хранения денежных величин. Занимает 8 байт;
- Decimal — десятичное масштабируемое число. Может содержать значения в диапазоне +/-79 228 162 514 264 337 593 543 950 335 или +/-7.9228162514264337593543950335 . Минимальное ненулевое значение равно +/-0.0000000000000000000000000001 . Обратите внимание на то, что объявить переменную данного типа явным образом нельзя. Тип Decimal является подтипом типа Variant и создается с помощью функции CDec() . Пример:
Создать объект целочисленного типа можно обычным способом:
Кроме того, можно указать число в восьмеричной или шестнадцатеричной форме. Такие числа будут автоматически преобразованы в десятичные целые числа. Восьмеричные числа начинаются с комбинации символов &O и содержат цифры от 0 до 7 :
Шестнадцатеричные числа начинаются с комбинации символов &H и могут содержать цифры от 0 до 9 и буквы от A до F :
Вещественное число может содержать точку и (или) быть представлено в экспоненциальной форме с буквой E (регистр не имеет значения):
При выполнении операций над вещественными числами следует учитывать ограничения точности вычислений. Например, результат следующей операции может показаться странным:
Ожидаемым был бы результат 0.0 , но, как видно из примера, мы получили совсем другой результат. Если необходимо производить операции с фиксированной точностью, то следует использовать тип Currency :
Функции для работы с числами
Для работы с числами предназначены следующие встроенные функции:
- CByte( ) — преобразует значение в число типа Byte . Если преобразование невозможно возбуждается исключение. Пример:
- CInt( ) — преобразует значение в число типа Integer . Если преобразование невозможно возбуждается исключение. Пример:
- CLng( ) — преобразует значение в число типа Long . Если преобразование невозможно возбуждается исключение. Пример:
- CSng( ) — преобразует значение в число типа Single . Если преобразование невозможно возбуждается исключение. Пример:
- CDbl( ) — преобразует значение в число типа Double . Если преобразование невозможно возбуждается исключение. Пример:
- CCur( ) — преобразует значение в число типа Currency . Если преобразование невозможно возбуждается исключение. Пример:
- CDec( ) — преобразует значение в число типа Decimal . Если преобразование невозможно возбуждается исключение. Пример:
- Val( ) — преобразует строку в целое или вещественное число. Строка просматривается слева направо пока не встретится недопустимый символ. В качестве десятичного разделителя должна быть указана точка. Пробелы, символы табуляции и символ перевода строки игнорируются. В строке могут быть указаны восьмеричные и шестнадцатеричные значения. Восьмеричные значения должны начинаться с комбинации символов &O , а шестнадцатеричные значения — с комбинации символов &H . Если преобразование невозможно функция возвращает значение 0 . Пример:
- Oct( ) — преобразует десятичное число в восьмеричное. Возвращает строковое представление числа. Пример:
- Hex( ) — преобразует десятичное число в шестнадцатеричное. Возвращает строковое представление числа. Пример:
- CStr( ) — преобразует значение в строку. Пример:
- str( ) — преобразует число в строку. Первый символ в строке резервируется под знак числа. Если число является положительным, то первый символ будет пробелом, а если отрицательным — то первым символом будет знак минус. Обратите также внимание на то, что при выводе десятичный разделитель отображается в виде точки, а не в виде запятой, как это было при использовании функции CStr() . Пример:
Функция str() возвращает значение типа Variant (String) . Чтобы получить значение типа String следует использовать функцию str$() , имеющую тот же самый формат. Пример:
- IsNumeric( ) — возвращает значение True , если значение можно преобразовать в число, и False — в противном случае:
Математические функции
Перечислим основные математические функции:
- Sin( ) , Cos( ) , Tan( ) — стандартные тригонометрические функции (синус, косинус, тангенс);
- Atn( ) — арктангенс числа. Получим значение числа Пи :
- Exp( ) — экспонента;
- Log( ) — логарифм;
- Sqr( ) — квадратный корень:
- abs( ) — возвращает абсолютное значение:
- Sgn( ) — позволяет определить знак числа. Возвращает одно из следующих значений:
- 1 — если число больше нуля;
- 0 — если число равно нулю;
- -1 — если число меньше нуля.
Округление чисел
Для округления чисел предназначены следующие функции:
- Fix( ) — возвращает значение, округленное до целого числа. Дробная часть числа просто отбрасывается:
- Int( ) — возвращает значение, округленное до целого числа. Для положительных чисел дробная часть просто отбрасывается, а для отрицательных чисел возвращается ближайшее меньшее значение:
Для округления чисел можно также воспользоваться функцией CInt() :
Генерация псевдослучайных чисел
Для генерации псевдослучайных чисел используются следующие функции и процедуры:
- Rnd([ ]) — возвращает псевдослучайное вещественное число типа Single меньше 1 , но большее или равное 0 . Если параметр не указан или задано положительное значение, то функция возвращает следующее псевдослучайное число из последовательности:
Если в качестве параметра указать отрицательное значение, то будет генерироваться одно и тоже число, соответствующее значению:
Если указано значение 0 , то функция возвращает последнее сгенерированное число:
- Randomize [ ] — настраивает генератор псевдослучайных чисел на новую последовательность.
Создадим генератор паролей произвольной длины (листинг 5.1). Для этого добавляем в массив arr все разрешенные символы, а далее в цикле получаем случайный элемент, сгенерировав индекс с помощью пользовательской функции Rand() , возвращающей целое число в указанном диапазоне.
Листинг 5.1. Генератор паролей
Статьи по Visual Basic for Applications (VBA)
Помощь сайту
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов
Источник
Int, Fix functions
Возвращает целую часть числа.
Синтаксис
Int(number) Fix(number)
Обязательный аргумент number — это double или любое допустимое числовое выражение. Если аргумент число содержит нулевое значение, возвращается нулевое значение.
Замечания
Функции Int и Fix удаляют дробную часть элемента число и возвращают результирующее целочисленное значение.
Разница между Int и Fix заключается в том, что если число является отрицательным, Int возвращает первое отрицательное целое число меньше или равно числу, а исправление возвращает первое отрицательное целое число больше или равно числу. Например, функция Int преобразует –8,4 в –9, а Fix преобразует –8,4 в –8.
Fix(number) эквивалентен Sgn(number) * Int(Abs(number)).
Пример
В этом примере показано, как функцииInt и Fix возвращают целые части чисел. Если используется отрицательный числовой аргумент, функция Int возвращает первое отрицательное целое число, которое меньше или равно этому числу; функция Fix возвращает первое отрицательное целое число, которое меньше или равно этому числу.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Функции VBA для работы с числовыми значениями
- ABS() — эта функция возвращает абсолютное значение переданного ей числа (то же число, но без знака). Например, ABS(3) и ABS(-3) вернут одно и то же значение 3.
- Int() , Fix() и Round() позволяют по разному округлять числа:
- Int() возвращает ближайшее меньшее целое;
- Fix() отбрасывает дробную часть;
- Round() округляет до указанного количества знаков после запятой.
Однако Round может вернуть не совсем ожидаемый результат, т.к. функция применяет финансовое округление. По правилам данного округления если за последней к округлению цифрой стоит 5, то округляемую цифру увеличивают в том случае, если она нечетная и уменьшают, если четная.
Математическое же округление всегда округляет цифру в большую сторону, если за ней идет цифра 5 и выше, и отбрасывает остаток если 4 и меньше.
Т.е. если мы выполним такую строку кодаMsgBox Round(2.505, 2)
то результатом будет 2,5 , хотя предполагалось получить 2,51 . Поэтому порой для округления лучше использовать Format :
MsgBox Format(2.505, «#,##0.00»)
но в этом случае мы получим не число в чистом виде, а текст. И если нужно именно число, то придется производить дополнительные преобразования:
MsgBox CDbl(Format(2.505, «#,##0.00»))
Так же, для математического округления, можно использовать и такой вариант:
MsgBox Application.Round(2.505, 2)
Но здесь стоит учитывать, что это не чистый VB и этот метод сработает только в Excel, т.к. по сути мы обращаемся к встроенной в Excel функции округления ОКРУГЛ (ROUND) , которая применяет именно математическое округление.
Rnd и команда Randomize используются для получения случайных значений (очень удобно для генерации имен файлов и в других ситуациях). Перед вызовом функции Rnd() необходимо выполнить команду Randomize для инициализации генератора случайных чисел.Dim lRundNum As Long, lMinNum As Long, lMaxNum As Long lMinNum = 1: lMaxNum = 100 Randomize lRundNum = Int(lMinNum + (Rnd() * lMaxNum)) MsgBox lRundNum
Источник
Выделение целой и дробной части типа Double
Форумы CADUser → Программирование → VBA → Выделение целой и дробной части типа Double
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщения 12
#1 Тема от masha 12 октября 2006г. 15:55:18
- masha
- Восстановленный участник
- На форуме с 18 мая 2006г.
- Сообщений: 175
- Спасибо: 0
Тема: Выделение целой и дробной части типа Double
Всем здравствуйте!
Если кто-нибудь знает, подскажите, пожалуйста, есть ли в VBA такая функция и если нет, то чем её можно заменить? Нужно вот для чего: есть очень большое число типа Double, которое надо разделить нацело на другое число. Оператор «» не срабатывает, потому что не может привести большое число к типу Long или Integer, ибо тот переполняется. Буду очень рада лююбым полезным советам. Спасибо.#2 Ответ от masha 12 октября 2006г. 16:23:04
- masha
- Восстановленный участник
- На форуме с 18 мая 2006г.
- Сообщений: 175
- Спасибо: 0
Re: Выделение целой и дробной части типа Double
Осенило! 🙂 Версия выделения целой части для положительного числа:
И всё-таки интересно, неужели нет стандартной функции. Неужели никому, кроме меня, не надо было.
#3 Ответ от Serj! 12 октября 2006г. 16:24:39
- Serj!
- Восстановленный участник
- На форуме с 27 апреля 2006г.
- Сообщений: 52
- Спасибо: 0
Re: Выделение целой и дробной части типа Double
> masha
первое, что приходит в голову — перевести его в String, сделать Split по точке (или запятой, не помню что там), и с 2-мя получившимися значениями делать что хочешь.#4 Ответ от Артём 12 октября 2006г. 16:26:16
- Артём
- Восстановленный участник
- На форуме с 30 августа 2006г.
- Сообщений: 47
- Спасибо: 0
Re: Выделение целой и дробной части типа Double
число неможет быть integer или long поэтому либо использовать double либо string
dim j as double
dim str as string
j=1.2546545649038E+18
j=j/901238
str=str(j)
.#5 Ответ от masha 12 октября 2006г. 16:40:03
- masha
- Восстановленный участник
- На форуме с 18 мая 2006г.
- Сообщений: 175
- Спасибо: 0
Re: Выделение целой и дробной части типа Double
Ну да, я сделала через String. Но как-то это через ж. немножко. 🙂
Кстати, если j=1.2546545649038E+18, то в какую строку оно должно преобразовываться: «1.2546545649038E+18» или
«1254654564903800000» ? Тогда надо ещё дополнительно рассматривать нулевую дробную часть. У меня вообще-то всё проще, дробная часть будет по-любому, поэто можно не отслеживать, но мне хотелось, чтобы оно работало всегда, а не только в текущей задачке. 🙂Источник