[erlang-questions] fread() for numbers - beginner question
andrew mmc
andrewmmc@REDACTED
Mon Apr 20 22:13:29 CEST 2009
Hello,
Where's the data from? I recently had a similar problem, which was solved
by ensuring the data was in floating point format. I was using data in .csv
files. I opened the file in excel, formatted the columns as a number with a
decimal point, and re-saved as a csv... all the formatting was intact and it
solved the problem.
Altering the data source might be your best option...if you can!
On Mon, Apr 20, 2009 at 6:02 PM, BranchingFactor
<branchingfactor@REDACTED>wrote:
> Thanks for the quick reply, Robbi. I was hoping to avoid the
> try-and-try-again approach b/c it doesn't extend so nicely to scanning
> multiple items from a string. Does Erlang provide any way to read what many
> other programming languages consider to be the printed representation of a
> number?
>
> --- On *Mon, 4/20/09, Robert Raschke <rtrlists@REDACTED>* wrote:
>
> From: Robert Raschke <rtrlists@REDACTED>
> Subject: Re: [erlang-questions] fread() for numbers - beginner question
> To: branchingfactor@REDACTED
> Cc: erlang-questions@REDACTED
> Date: Monday, April 20, 2009, 6:57 AM
>
>
> On Mon, Apr 20, 2009 at 10:43 AM, BranchingFactor
> <branchingfactor@REDACTED>
> wrote:
> > I'd like to io_lib:fread() a number from a string. Unfortunately, if
> I use
> > "~f" for floating point number, then fread rejects numbers that
> don't have
> > fractional parts:
> >
> >> io_lib:fread("~f", "1").
> > {error,{fread,float}}
> >> io_lib:fread("~f", "1.").
> > {error,{fread,float}}
> >
> > (I find this very strange, since both 1 and 1. can be represented in a
> > floating point number.)
> > And if I use "~d" for decimal integers, then fread won't
> read past the
> > decimal point:
> >
> >> io_lib:fread("~d", "1.0").
> > {ok,[1],".0"}
> >
> > What is the easiest way to scan a number from a string in erlang?
> Ideally
> > it would scan any number in any input format and return an Erlang object
> > that satisfied the is_number() predicate.
>
> scan_number(S) ->
> case io_lib:fread("~f", S) of
> {error, _}
> -> io_lib:fread("~d", S);
> Result -> Result
> end.
>
> This doesn't handle 16#ffff and friends though. but you can extend it
> according to you needs.
>
> And "1." is not a valid Erlang number.
>
> Robby
>
>
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20090420/e58fc4cf/attachment.htm>
More information about the erlang-questions
mailing list