Boost logo

Boost Users :

From: Rainer Thaden (RThaden_at_[hidden])
Date: 2008-04-28 10:11:10


Hi Peter,

Peter wrote:
> I'm wondering how to use the numeric_conversion library to perform rounding
> based on types.
>
> Assume I have a double value of 3.7. If I convert it to integer, the result
> should be 4. If I convert it to float, the result should be 3.7. The types I
> want to convert from and to are both specified in a template, i.e. they form
> an open set of types.
>
>>From reading the numeric_conversion docs I tend to think that the library
> can do what I want, but I'm unable to find out how.
>
> Can anybody help?

the default behaviour of numeric_cast seems to be to truncate so 3.7
will be casted to 3.
I asked nearly the same question some time ago and got a useful answer
from Fernanco Cacciola. Look at his post from 23.04.08 (don't know how
to link it here)

Maybe I should just paste it, so here it comes:

> numeric_cast<> uses the default policies, but you an easily create you own
> version with any other policy, like the one which rounds floats to the
> nearest integer: RoundEven<>
>
> #include <boost/numeric/conversion/converter.hpp>
>
> template<typename Target, typename Source>
> inline
> Target my_numeric_cast ( Source arg )
> {
> typedef boost::numeric::conversion_traits<Target,Source> Traits ;
>
> typedef
> boost::numeric::converter<Target,Source,Traits,boost::numeric::def_overflow_handler,boost::numeric::RoundEven<Source>
> > Converter ;
>
> return Converter::convert(arg);
> }
>
>
> HTH
>
> --
>Fernando Cacciola

Regards,

Rainer


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net