2013-05-16 52 views
8

我需要生成一個字符串,稍後會打印出來並且不能有小數點。爲此,我嘗試在Erlang中使用io_lib:format模塊,但我不確定實現此目的的適當格式。如何將一個erlang浮點數格式化爲一個整數(不帶小數點)

例如,我可以使用下面的高達.1精度,而不是0.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「

我知道我可以做一個「重新」替換,但我試圖找到一個格式優雅的方式。

回答

14
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

+0

我喜歡這種方法和功能。相當完整。 – gextra

+0

#1的答案不應該是223嗎? – JoshOfAllTrades

19

如果截斷在二郎一個浮點數就會變得整數。以下是代碼。

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 
+0

'round(1.44445)''在我的環境(Erlang R16B)以及在[Try Erlang](http://www.tryerlang.org)在線REPL中返回'1'。我不會依賴這個功能。 Ideone [似乎返回](http://ideone.com/yppCjM)的結果相同。 –

+6

@YasirArsanukaev:應該輪到什麼(1.44445)'如果不是'1'則返回? – legoscia

+1

我想這會工作,爲產生一個字符串出它沒有揭示任何小數點:io_lib:格式(「這是數〜P」,[TRUNC(1.5)])。 [84,104,105,115,32,105,115,32,110,117,109,98,101,114,32,「1」] – gextra

0

要轉換成整數,你可以這樣做:

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

,如果你想保留,因爲它是字符串,則

erlang:float_to_list(789.1234,[{decimals,0}]). 
相關問題