[Haskell-cafe] round function

Chatzianastassiou Achilleas achatzianastassiou at hotmail.com
Sun Feb 12 18:43:35 EST 2006


The

myRound n places = round (n / fromIntegral factor) * factor
    where factor = 10 ^ (places - 1)
seems to work for i.e. 2, but doesn't for 4, it returns 0.
However the

myround n s = fromIntegral (round (n * factor)) / factor
   where
   shift = s - (floor (logBase 10 n)  + 1)
   factor = 10 ** fromIntegral shift

works absolutely fine. Many thanks for the post.
Skag

>From: "J. Garrett Morris" <trevion at gmail.com>
>To: Chatzianastassiou Achilleas <achatzianastassiou at hotmail.com>
>CC: haskell-cafe at haskell.org
>Subject: Re: [Haskell-cafe] round function
>Date: Sun, 12 Feb 2006 18:28:40 -0500
>
>I think the function you're looking for is:
>
>myRound n places = round (n / fromIntegral factor) * factor
>     where factor = 10 ^ (places - 1)
>
>In this case, 10 ^ (places - 1) has integral type (either Int or
>Integer).  I need it to be a fractional type to divide n by it, so I
>use fromIntegral to convert it.
>
>  /g
>
>On 2/12/06, Chatzianastassiou Achilleas <achatzianastassiou at hotmail.com> 
>wrote:
> > Thanks for the anwser Sebastian,
> >
> > this seems to work, however I am trying to implement something like
> > Main> myfunction 123.456 2
> > 120.0
> >
> >
> > >From: Sebastian Sylvan <sebastian.sylvan at gmail.com>
> > >Reply-To: sylvan at student.chalmers.se
> > >To: Chatzianastassiou Achilleas <achatzianastassiou at hotmail.com>
> > >CC: haskell-cafe at haskell.org
> > >Subject: Re: [Haskell-cafe] round function
> > >Date: Sun, 12 Feb 2006 22:23:17 +0100
> > >
> > >On 2/12/06, Chatzianastassiou Achilleas 
><achatzianastassiou at hotmail.com>
> > >wrote:
> > > > Hi all,
> > > >
> > > > I am trying to implement a function that finds the significant 
>figure of
> > >a
> > > > number to a specified point i.e. 2.55555 3 = 2.556. I have 
>implemented
> > > > something like:
> > > >
> > > > sig :: (RealFrac a, Integral b) => a -> Int -> a
> > > > sig x y = round y
> > > >
> > > > However this doesn't work. Moreover at the Prelude when i type round
> > >2.3333
> > > > 2 i get an error.
> > > > Any suggestions?
> > > >
> > >
> > >Something like:
> > >
> > >myround n s = fromIntegral (round (n * factor)) / factor
> > >     where factor = fromIntegral (10^s)
> > >
> > >Basically scaling it to bring the specified number of digits to the
> > >left of the decimal point, then rounding, then scaling back.
> > >
> > >/S
> > >
> > >--
> > >Sebastian Sylvan
> > >+46(0)736-818655
> > >UIN: 44640862
> >
> > _________________________________________________________________
> > FREE pop-up blocking with the new MSN Toolbar – get it now!
> > http://toolbar.msn.click-url.com/go/onm00200415ave/direct/01/
> >
> > _______________________________________________
> > Haskell-Cafe mailing list
> > Haskell-Cafe at haskell.org
> > http://www.haskell.org/mailman/listinfo/haskell-cafe
> >
>
>
>--
>We have lingered in the chambers of the sea
>By sea-girls wreathed with seaweed red and brown
>Till human voices wake us, and we drown.

_________________________________________________________________
Don’t just search. Find. Check out the new MSN Search! 
http://search.msn.click-url.com/go/onm00200636ave/direct/01/



More information about the Haskell-Cafe mailing list