[erlang-questions] Float to binary

Bob Cowdery <>
Mon Mar 21 15:58:54 CET 2011


Ah, so I can do:

1> F=7.1.
7.1
2> B = <<(round(F*1000000)):32/big>>.
<<0,108,86,96>>

This is part of a much larger binary that is sent to a device.

Thanks
Bob

On 21/03/2011 14:25, Alexey Romanov wrote:
>> It seems to
>> know that F is 1.0 as it let me rebind it.
> 1) All variables in list and binary comprehension generators are fresh, so
> <<F:64/float>> <= ... does not rebind F at all.
>
>> If I have a float value. This happens to be a frequency in MHz which I
>> need to convert to a 32 bit integer big-endian format in Hz how do I get
>> the float into a suitable format.
> Why do you want to convert it to binary at all, instead of simply
> `round(F*1000000)`?
>
> But if you do (e.g. you want to pack multiple floats there),
>
> 1> <<1.0:64/float>>.
> <<63,240,0,0,0,0,0,0>>
>
>
> Yours, Alexey Romanov
>
>
>
> On Mon, Mar 21, 2011 at 5:09 PM, Bob Cowdery <> wrote:
>> If I have a float value. This happens to be a frequency in MHz which I
>> need to convert to a 32 bit integer big-endian format in Hz how do I get
>> the float into a suitable format.  The following converts the term into
>> an external term format which is no good for the binary comprehension.
>> How can I convert the value into a binary without getting the external
>> 1> F=1.0.
>> 1.0
>> 2> B = term_to_binary(F, [{minor_version, 1}]).
>> <<131,70,63,240,0,0,0,0,0,0>>
>> 3> << <<(round(F*1000000)):32/big>> || <<F:64/float>> <=
>> <<63,240,0,0,0,0,0,0>> >>.
>> <<0,15,66,64>>
>>
>> Thanks once again for any help.
>>
>> Bob
>>
>> ________________________________________________________________
>> erlang-questions (at) erlang.org mailing list.
>> See http://www.erlang.org/faq.html
>> To unsubscribe; mailto:
>>
>>



More information about the erlang-questions mailing list