Question Comment formater un flotteur erlang dans un entier (sans point décimal)


Je dois produire une chaîne qui sera imprimée plus tard et ne peut pas contenir de point décimal. Pour cela, j'essaie d'utiliser le module io_lib: format dans Erlang, mais je ne suis pas certain du format approprié pour y parvenir.

Par exemple, je peux utiliser les éléments suivants jusqu'à la précision .1, mais pas .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])

Tout ce dont j'ai besoin est de:

  • 789.1234 produire la chaîne "789"

  • 123.0 produit la chaîne "123"

Je sais que je peux faire un "re" remplacement mais j'essaie de trouver une manière élégante de format.


9
2018-05-16 23:12


origine


Réponses:


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


15
2018-05-16 23:52



Si vous tronquez un nombre flottant dans erlang, il deviendra entier. Ci-dessous est le code.

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

20
2018-05-17 07:10



Pour convertir en entier, vous pouvez faire:

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

et si vous voulez garder comme il est en chaîne alors

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

0
2018-04-24 10:57