$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
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