[Haskell-cafe] reading and writing Data.Ratio.Rational

David Feuer david.feuer at gmail.com
Mon Mar 6 20:46:58 UTC 2017


I think your best bet is probably to get your hands dirty and parse it
yourself: first grab an integer, then optionally a decimal point, etc.

On Mar 6, 2017 3:43 PM, "Olaf Klinke" <olf at aatal-apotheke.de> wrote:

> Ah, thanks! That is something to build on.
>
> Olaf
> > Am 24.02.2017 um 15:35 schrieb Patrick Chilton <chpatrick at gmail.com>:
> >
> > Prelude> import Numeric
> > Prelude Numeric> fst $ head $ readFloat "0.1234" :: Rational
> > 617 % 5000
> >
> > On Fri, Feb 24, 2017 at 1:17 PM, Olaf Klinke <olf at aatal-apotheke.de>
> wrote:
> > Dear cafe,
> >
> > when processing text files containing numbers of the form "xxxx.yyyy" I
> used to parse them into Double using that type's Read instance. Obviously,
> even with arithmetic no more complicated than the field operations the
> result might have ugly rounding errors like 12.000000000002 due to the fact
> that numbers like 0.7 are not dyadic rationals. The math in my program is
> not complicated and the numbers are not large, so I don't care about
> Rationals having potentially huge memory footprints.
> >
> > So here's my question. A literal like 0.7 has type Fractional a => a,
> but the Read instance of Rational rejects the string "0.7". Must it be this
> way? Do I have to go via toRational.(read :: String ->
> Data.Scientific.Scientific)?
> >
> > Note that the documentation of Data.Scientific explicitly states that
> using (/) is unsafe, so I'd rather stay with the field Rational.
> >
> > For the output as decimal expansion, there is of course long division as
> described here [1], but I wonder whether either this exists in some library
> or there is even a more efficient solution.
> >
> > Any pointers are appreciated.
> > Thanks,
> > Olaf
> >
> > [1] http://stackoverflow.com/questions/30931369/how-to-
> convert-a-rational-into-a-pretty-string
> > _______________________________________________
> > Haskell-Cafe mailing list
> > To (un)subscribe, modify options or view archives go to:
> > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> > Only members subscribed via the mailman list are allowed to post.
> >
>
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20170306/22db606f/attachment.html>


More information about the Haskell-Cafe mailing list