Truncate a float in Erlang

2019-01-19 12:29发布

I am using a function to create a list from a float.

 float_to_list(0.02).

It returns:

"2.00000000000000000000e-002"

I need it to give me a number exactly like:

"0.20"

If I fed it 5.23

"5.23"

If I fed it 5.5

"5.50"

So basically the number rounded to two decimal places. Probably an easy fix.

Thanks

EDIT:

I would like to use the io format it looks like it might work,

but it dosen't in this example:

wxTextCtrl:setValue( TcGrossProfit, io:format("~p", [NUMBER]), ),

seems textctrl wants a string, I don't want to print it to the screen.

5条回答
家丑人穷心不美
2楼-- · 2019-01-19 13:03

I know people don't like the, "I am not an expert in language X" answers, but the printf command is quite ubiquitous so I will say, look for an analog of printf in Erlang.

Edit: It looks like the format and fwrite may be those analogs. For more info from erlang.org.

查看更多
SAY GOODBYE
3楼-- · 2019-01-19 13:08

This link provides functions that truncate/floor or ceil or round a float. Given those you can round to 2 digits by multiplying by 100, rounging and then dividing back by 100 (and possibly rounding again to avoid precision errors)

查看更多
放荡不羁爱自由
4楼-- · 2019-01-19 13:13

Alternatively you could use the function you were already using.

float_to_list(0.02,[{decimals, 2}]) outputs '0.02'

Or for Elixir users ;)

:erlang.float_to_list(5.231,[{:decimals, 2}]) outputs '5.2'

查看更多
我欲成王,谁敢阻挡
5楼-- · 2019-01-19 13:19

mochinum:digits converts a float to a string with an appropriate level of precision.

1> mochinum:digits(1.1).
"1.1"
2> mochinum:digits(1.2345).
"1.2345"

Not exactly what the OP requested, but useful nonetheless.

查看更多
Explosion°爆炸
6楼-- · 2019-01-19 13:30

Are you looking for something like this:

6> F = 5/2.
2.50000
7> io_lib:format("~.1f",[F]).
["2.5"]
8> io_lib:format("~.2f",[F]).
["2.50"]
9> io_lib:format("~.3f",[F]).
["2.500"]

if yes, have a look at the module io_lib.

查看更多
登录 后发表回答