
Show is not truncating anything. Show never had those digits to read from
in the first place. The problem is that once you convert to floats or
doubles, the number will be truncated. They do not have infinite
precision. You cannot pass a literal float and have it go to infinite
precision. You have two options:
You either pass the float as a string ie toText "1.23456"
Or you use rationals toText (
3.141591234567123123897192712937123987123987123 :: Rational) and do the
arithmetic to change that into text
3141591234567123123897192712937123987123987123 %
1000000000000000000000000000000000000000000000
import Numeric
import Data.Rational
import GHC.Real
let (num :% den) = fst $ head $ (readSigned readFloat)
"3.141591234567123123897192712937123987123987123" :: Rational
num -> 3141591234567123123897192712937123987123987123
den -> 1000000000000000000000000000000000000000000000
Then use the size of the denominator to figure out how far over to move the
"point" in the first number.
On Wed, Sep 18, 2013 at 11:12 AM, yi lu
Thishttps://github.com/eccstartup/numberToText/blob/master/src/Text/New/NumberTo...is my poor code. *show* function truncated these digits.
On Wed, Sep 18, 2013 at 11:07 PM, yi lu
wrote: You are right! I hope to input a number, for example 123, and output its text "one hundred and twenty-three". So, for 1.23456789012345678901, I want the result is "one point two three four five six ...(something omitted)". I can define a funciton, say "toText", to preform this action. In ghci, I can use like this. Prelude>toText 123.45 "one hundred and twenty-three point four five"
However, in this function, I have to read this number as String(originally a number, now "123"), and make it to words(String) like "one two three". But for a float number, it will not work very well. Prelude>toText 1.23456789012345678901 "(a truncated answer)"
This confuses me!
Yi
On Wed, Sep 18, 2013 at 10:23 PM, Oscar Benjamin < oscar.j.benjamin@gmail.com> wrote:
On Sep 18, 2013 2:15 PM, "yi lu"
wrote: In fact, I am not looking for some way to convert a float 0.75 to 3%4.
Your reply is helpful!
What I need is just as much number of digits as possible. If I can hold as many digits of pi, i.e. 3.1415926535... as possible and save it in a String, it will be perfect!
I think something is still missing from your description.
If you want to store the digits of pi in a string then why not use a string?
Oscar
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners