开发者

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

开发者 https://www.devze.com 2023-01-24 01:24 出处:网络
What is the recommended way to convert a floating point type to an integer type, truncating everything after the decim开发者_运维百科al point? CLng rounds, apparently, and the documentation for the =

What is the recommended way to convert a floating point type to an integer type, truncating everything after the decim开发者_运维百科al point? CLng rounds, apparently, and the documentation for the = operator doesn't mention the subject.


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


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.


For positive numbers you would use

truncated = Int(value)

If used on negative numbers it would go down, i.e. -7.2 would become -8.

0

精彩评论

暂无评论...
验证码 换一张
取 消