[erlang-questions] Convert bigint() to float() in erl_nif.

Sverker Eriksson <>
Mon Nov 21 14:32:20 CET 2011


Michael Uvarov wrote:
> How to convert any number to float in erl_nif code?
> Function float/1 is for the erlang version of code, but there is no this
> function for NIFs.
>
>   
There is no support for dynamically sized bignums at all in the current 
erl_nif API. The best you can do now is:

double f;

if (!enif_get_double(env, term, &f)) {
    ErlNifSInt64 sint;
**    ErlNifUInt64 uint;
**
    if (enif_get_int64(env, term, &sint))
        f = (double)sint;
    else if (enif_get_uint64(env, term, &uint))
        f = (double)uint;
    else
        return enif_make_badarg(env);
}


I guess you would want something like:

int enif_get_number_as_double(ErlNifEnv*, ERL_NIF_TERM, double*);


/Sverker, Erlang/OTP, Ericsson




More information about the erlang-questions mailing list