Про приведення до цілих чисел та округлення

Про приведення до цілих чисел та округлення

У багатьох проггерів на VB часто виникають проблеми з правильним перетворенням дійсних чисел або рядків, що містять числа до цілих чисел. Проблеми виникають через деякі нюанси використання функцій перетворення типів VB . Розглянемо ці функції.

Функції Int та Fix

Ці функції повертають цілу частину числа. Передбачається, що аргумент має тип Double або є числовим виразом. Повертається у Double . А вже цей Double потім можна перетворити в Integer, Long або Byte. Головне, щоб кількість вмістилася в діапазон потрібного вам типу. Різниця при використанні Int і Fix помітна тільки при негативному значенні аргументу. Справа в тому, що Int завжди повертає найближче ціле число, а Fix просто відкидає дробову частину. Тобто числа 4.5 і Int і Fix повернуть 4, тоді як числа -4.5, Int поверне -5, а Fix - -4.

Функції CLng та CInt

Ці функції перетворюють числові аргументи на ціле число типу Long і Integer відповідно. Дробова частина у своїй округляється. Таким чином, якщо вихідне число дорівнюватиме 1.5, то результатом перетворення за допомогою CInt або CLng буде ціле число 2. А якщо аргументом буде 1.4, то в результаті отримаємо 1. Знак числа при цьому ролі не грає, тобто -1.5 буде перетворена в -2, а -1.4 - -1. Природно при використанні CLng і CInt треба пам'ятати про діапазони допустимих значень типів Long та Integer. Число, що отримується після перетворення, повинно вміщуватися в ці діапазони. Наприклад, число 32767.5 після перетворення функцією CInt має дорівнювати 32768, що на одиницю більше верхньої межі подання для типу Integer , тоді як 32767.4 буде перетворено на 32767 і цілком успішно може бутипредставлено типом Integer. При перетворенні з рядка, що містить число, важливо пам'ятати, що функції перетворення використовують національні налаштування для отримання символу поділу цілої та дробової частин числа. Тому, якщо у вас роздільником цілої та дробової частин числа є точка «.», а в рядковому поданні числа буде фігурувати кома, то ви отримаєте помилку розбіжності типів при спробі перетворити такий рядок на ціле число (до речі, ця помилка виникне і при спробі використання CDbl або CSng для перетворення рядка в речове число, а також і при використанні Int або Fix).

Про функції Val, CDbl та CSng

Ці функції хоч і не мають відношення до перетворення на цілі числа, але варто їх розглянути. Є тут свої нюанси. CDbl і CSng аналогічні CLng та CInt. CDbl перетворює аргумент на речове число типу Double, CSng відповідно в Single. Звичайно треба звертати увагу на попадання аргументу в діапазон уявлення і на правильність роздільника цілої та дробової частин. А ось Val...

Функція Val повертає число, що міститься в рядку аргумент як числове значення відповідного типу. Ця функція намагатиметься перетворити рядок доти, доки не зустріне символ, який не може бути розпізнаний як частина числа. Зокрема, функція чудово розуміє префікс & O для чисел у восьмеричній системі запису та & H для шістнадцяткових чисел. А ось прогалини Val просто ігнорує. Ще одним нюансом є той факт, що як роздільник використовується тільки точка «.» незалежно від національних налаштувань.

Таким чином, функція Val перетворює рядки наступним чином: