За свеждането до цели числа и закръгляването

За свеждането до цели числа и закръгляването

Много 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 връща числото, съдържащо се в аргументния низ като числова стойност от съответния тип. Тази функция ще се опита да преобразува низа, докато не срещне знак, който не може да бъде разпознат като част от число. По-специално, функцията разбира префикса & O за числа в осмичен запис и & H за шестнадесетични числа. Но Вал просто игнорира интервалите. Друг нюанс е фактът, че само точката "." се използва като разделител. независимо от националните настройки.

Така че функцията Val преобразува низове по следния начин: