如何将erlang float格式化为整数(不带小数点)

时间:2013-05-16 23:12:17

标签: erlang

我需要生成一个稍后会打印的字符串,并且不能有小数点。为此,我试图在Erlang中使用io_lib:format模块,但我不确定实现此目的的适当格式是什么。

例如,我可以使用以下.1精度,但不能.0

io_lib:format("~.2f", [789.1234]).
789.12

io_lib:format("~.1f", [789.1234]).
789.1

io_lib:format("~.0f", [789.1234]).
** exception error: bad argument
 in function  io_lib:format/2
    called as io_lib:format("~.0f",[789.1234])

我所需要的只是来自:

  • 789.1234生成字符串“789”

  • 123.0生成字符串“123”

我知道我可以进行“重新”替换,但我正在努力寻找一种格式优雅的方式。

3 个答案:

答案 0 :(得分:20)

如果在erlang中截断一个浮点数,它将变为整数。下面是代码。

1> is_float(round(1.5)).
false
2> is_integer(round(1.5)).
true 
3> is_float(trunc(1.5)).    
false
4> is_integer(trunc(1.5)).
true
5> round(1.5).            
2
6> trunc(1.5).            
1

答案 1 :(得分:15)

1> float_to_list(223.44456,[{decimals,0}]).
"224"

2> float_to_list(223.44456,[{decimals,6}]).        
"223.444560"

3> float_to_list(223.44456,[{decimals,6},compact]).       
"223.44456"

erlang:float_to_list/2

答案 2 :(得分:0)

要转换为整数,您可以执行以下操作:

erlang:list_to_integer(erlang:float_to_list(789.1234,[{decimals,0}])).

如果你想保持字符串,那么

erlang:float_to_list(789.1234,[{decimals,0}]).