在Erlang中截断一个浮点数

时间:2010-10-23 21:38:45

标签: list erlang floating-point

我正在使用一个函数从浮点数创建一个列表。

 float_to_list(0.02).

它返回:

"2.00000000000000000000e-002"

我需要它给我一个完全相同的数字:

“0.20”

如果我喂它5.23

“5.23”

如果我喂它5.5

“5.50”

所以基本上这个数字四舍五入到小数点后两位。 可能很容易解决。

由于

编辑:

我想使用它看起来可能有效的io格式,

但它不在这个例子中:

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

似乎textctrl想要一个字符串,我不想把它打印到屏幕上。

5 个答案:

答案 0 :(得分:25)

你在寻找这样的东西:

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"]

如果是,请查看模块io_lib。

答案 1 :(得分:3)

mochinum:digits将float转换为具有适当精度级别的字符串。

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

不完全是OP所要求的,但仍然有用。

答案 2 :(得分:3)

或者你可以使用你已经使用过的功能。

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

或Elixir用户;)

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

答案 3 :(得分:0)

我知道人们不喜欢“我不是语言X专家”的答案,但是printf命令非常普遍,所以我会说,在Erlang中寻找printf的模拟。

编辑:看起来格式和fwrite可能是那些类似物。有关erlang.org的更多信息。

答案 4 :(得分:0)

This link提供截断/ floor或ceil或round浮点函数。鉴于那些你可以通过乘以100来舍入到2位数,然后重新排列然后再除以100(并且可能再次舍入以避免精度误差)