
Here are a few small utility functions that I use for rounding and truncating values. Its probably a good idea to add this functionality to boost. However, I'm sure that the implentations could be significantly improved. enum RoundDirection { rd_AwayZero=0, rd_TowardZero=1, }; template <class A> inline A roundTo(A val, int decimalPlaces) { double mult=pow(10.0, decimalPlaces); return round(val*mult)/mult; } template <class A> inline A roundTo(A val, int decimalPlaces, RoundDirection rd) { A ret; double mult=pow(10.0, decimalPlaces); bool less0=(val<0.0 ? true : false); if (less0) { if (rd==rd_AwayZero) rd=rd_TowardZero; else if (rd==rd_TowardZero) rd=rd_AwayZero; } switch (rd) { case rd_AwayZero: ret=ceil(val*mult)/mult; break; case rd_TowardZero: ret=floor(val*mult)/mult; } return ret; } template <class A> inline A truncTo(A val, int decimalPlaces) { double mult=pow(10.0, decimalPlaces); return trunc(val*mult)/mult; }