Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert a floating-point type to an integer type without rounding in VB6

Tags:

vb6

What is the recommended way to convert a floating point type to an integer type, truncating everything after the decimal point? CLng rounds, apparently, and the documentation for the = operator doesn't mention the subject.

like image 203
Brian Hooper Avatar asked Dec 10 '25 22:12

Brian Hooper


2 Answers

UseFix or Int depending on the treatment you wish for negative numbers.

Microsoft article Q196652 discusses rounding in incredible detail. Here is an excerpt

The VB Fix() function is an example of truncation. For example, Fix(3.5) is 3, and Fix(-3.5) is -3.

The Int() function rounds down to the highest integer less than the value. Both Int() and Fix() act the same way with positive numbers - truncating - but give different results for negative numbers: Int(-3.5) gives -4.

Full disclosure: I referred to this nice answer by elo80ka

like image 164
MarkJ Avatar answered Dec 14 '25 12:12

MarkJ


see this

Undocumented behavior of the CInt() function The CInt() function rounds to the nearest integer value. In other words, CInt(2.4) returns 2, and CInt(2.6) returns 3.

This function exhibits an under-documented behavior when the fractional part is equal to 0.5. In this case, this function rounds down if the integer portion of the argument is even, but it rounds up if the integer portion is an odd number. For example, CInt(2.5) returns 2, but CInt(3.5) returns 4.

This behavior shouldn't be considered as a bug, because it helps not to introduce errors when doing statistical calculations. UPDATE: Matthew Wills let us know that this behavior is indeed documented in VB6's help file: When the fractional part is exactly 0.5, CInt and CLng always round it to the nearest even number. For example, 0.5 rounds to 0, and 1.5 rounds to 2. CInt and CLng differ from the Fix and Int functions, which truncate, rather than round, the fractional part of a number. Also, Fix and Int always return a value of the same type as is passed in.

like image 38
Beth Avatar answered Dec 14 '25 10:12

Beth



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!