[AccessD] Rounding percent midways

Stuart McLachlan stuart at lexacorp.com.pg
Tue Nov 13 14:06:15 CST 2012


That's a neat idea as long as you are aware of its effects and use it sensibly - i.e. not as a 
general rounding function :-)

It's going into my toolbox( with one minor enhancement)  

Function PCRound(Value As Double, Digits As Long) As Double
    PCRound = Fix((Value - 0.5) * 10 ^ Digits) / 10 ^ Digits + CDec(0.5)
End Function

-- 
Stuart


On 13 Nov 2012 at 16:58, Gustav Brock wrote:

> Hi all
> 
> I had a bright moment(!) regarding rounding percent values, a topic which
> from time to time has caught my attention.
> 
> The philosophy behind this is, that 0% is zero, not something very small,
> and 100% is everything, not nearly everything. A progress bar showing 0%
> means "nothing" and 100% means "all". 
> 
> Consequently, normal 4/5 rounding cannot be used as very small values would
> be rounded to zero, and values nearly 100% would be rounded to 100%.
> Rounding up would work for very small values but large values like 99.996%
> would be rounded up to 100.00%. You could round down, but that would move
> the issue to rounding very small values, say, 0.004% down to 0.00%. Thus,
> neither rounding up or down can be used.
> 
> The solution is to round up for small values and down for large values or,
> in other words, to round "towards" 50%. But how?
> This is where Fix comes in. It rounds towards zero, so by off-setting the
> value range of 0 to 1 to -0.5 to 0.5, Fix can be applied. After the
> rounding, reset the range to cover 0 to 1.
> 
> Here is how:
> 
> dblValue = Fix((dblValue - 0.5) * 10000) / 10000 + CDec(0.5)
> 
> This will round, say, 0.004% and 99.996% to 0.01% and 99.99% respectively.
> CDec is used to prevent floating point errors.
> 
> /gustav
> 
> -- 
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
> 




More information about the AccessD mailing list