Better Int()?

BlitzPlus Forums/BlitzPlus Programming/Better Int()?

OK Int rounds numbers that are exactly halfway e.g. 0.5, 1.5 etc towards nearest even number e.g. 0.5 = 0 but 1.5 = 2. I think this is called bankers rounding (for a more fair rounding of money), but it stinks for me! Anyone know a quick way to always round 0.5 down? e.g 1.5 = 1 but 1.6 = 2

I'm not sure of any "Quick way" but this is what I came up with, adjust as needed.

Function MyRounding%(Value#)

	Places#=(Value-Floor(Value))
	If Places>0.5
		Return Ceil(Value)
	Else
		Return Floor(Value)
	EndIf
	
End Function


Function Round(flot#)
	Return Floor(flot+0.5)
End Function


lol, nice one. Just me over doing it as usual.

Owned.

Nice one guys! I was just too tired to work it out and it was causing me a massive bug in a level editor.

Too bad this function doesn't just return the integer part, like most other basic's do....

Russell

Russell: luckily Floor does that.

Not by itself. Floor just rounds 'down' toward negative infinity. Floor(-1.7) returns -2.0 for example.

Russell

Under other basics, Int(-1.7) would return -1.

For the fractional portion, you can use Frac(-1.7), if available or just subtract the Int() portion from the original. Of course, that can be a bit sketchy given the nature of floats (-1.7 could be defined internally as -1.700099 or similar).

Beaker's example does help, though.

Russell

Russell: I knew that, glad u did too!

Too bad this function doesn't just return the integer part, like most other basic's do....

Function ClassicInt(flt#)
  If flt#< 0
    Return Ceil(flt#)
  Else
    Return Floor(flt#)
  EndIf
End Function