
On 18 September 2013 16:07, yi lu
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)".
You should probably explain this at the beginning!
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!
I suspect you don't yet understand what a float really is: http://en.wikipedia.org/wiki/Single-precision_floating-point_format If you do understand what a single (or double) precision float is then consider this: most values cannot be exactly represented by the float type. When you ask Haskell to create a float with some value given as a decimal string it will usually not return a float with the exact value you asked for since this is often impossible. Instead it will only promise to give you a "close" value. For your problem I would just use string manipulation. Testing for n<1000000 is just as easy as testing the length of a decimal string. Conversion to float or Rational is usually only worthwhile if you're intending to do some arithmetic which you're not. So your input is a string your output should be a string and you're not doing arithmetic: you may as well view this as a text processing problem and just write functions that work with strings. Oscar