[erlang-questions] convert strings like "1e-8" to floats.

Mikael Pettersson mikpelinux@REDACTED
Wed Feb 8 12:16:35 CET 2017

Oleksii Semilietov writes:
 > Hi all!
 > I playing with converting binaries and lists to floats and I found
 > something what I can't solve via elegant way. I believe it's my leakage of
 > understanding floats.
 > So, what is different between 1e-8 and 1.0e-8 ?
 > For example we have float as list "0.01".  It is easy to convert it to
 > float just via list_to_float("0.01").
 > But when floats coming from external world as binaries or lists which looks
 > like "1e-8", and not like "1.0e-8", I can't find proper way to convert it.
 > For example in PHP both 1e-8 and 1.0e-8 is equivalent
 > var_dump(floatval("1e-8") === floatval("1.0e-8")) returns true.
 > Javascript 1E-8 === 1.0E-8 is also true.
 > In Erlang
 > list_to_float("1.0E-8") =:= 0.00000001
 > true
 > but
 > list_to_float("1E-8") =:= 0.00000001.
 > ** exception error: bad argument in function list_to_float/1 called as
 > list_to_float("1E-8")
 > How to convert it via right way?

Write your own conversion routine.

Your mistake is assuming literals like floats have the same look and feel
regardless of language or environment.  That's in general not true.

You may also consider the different notation for integers with non-decimal
base, e.g. 0xabba vs 16#abba, or character literals, etc.

What it means is that a tool written in one language but processing source
code for another, must be prepared to do all conversions on its own without
relying on ready-made services in the implementation language.

More information about the erlang-questions mailing list