2010-10-23 11 views
10

Sto utilizzando una funzione per creare un elenco da un float.Tronca un float in Erlang

float_to_list(0.02). 

Restituisce:

"2.00000000000000000000e-002" 

ho bisogno di darmi un numero esattamente:

"0.20"

Se ho dato da mangiare lo 5,23

"5.23 "

Se ho dato da mangiare lo 5,5

"5.50"

Quindi, in pratica il numero arrotondato a due cifre decimali. Probabilmente una soluzione semplice.

Grazie

EDIT:

Vorrei utilizzare il formato io sembra che potrebbe funzionare,

ma dose non in questo esempio:

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

sembra che textctrl voglia una stringa, non voglio stamparla sullo schermo.

risposta

24

Siete alla ricerca di qualcosa di simile:

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

se si, dai un'occhiata al modulo io_lib.

+0

+1 per essere l'unica risposta che menziona 'io_lib' - la cosa che si adatta alle stringhe (ovvero le liste), invece di stampare l'output come' io'. – ndim

+0

Grazie per l'aiuto! – BAR

+0

@ndim Non l'unica risposta :( –

0

So che le persone non amano le risposte "Non sono un esperto di linguaggio X", ma il comando printf è piuttosto onnipresente quindi, dirò, cerco un analogo di printf in Erlang.

Edit: Sembra che il formato e fwrite possono essere quelli analoghi. Per maggiori informazioni da erlang.org.

0

This link fornisce funzioni che troncano/pavimento o ceil o rotondo un galleggiante. Dato quelli che si possono arrotondare a 2 cifre moltiplicando per 100, rounging e dividendo indietro di 100 (e, eventualmente, l'arrotondamento di nuovo per evitare errori di precisione)

3

mochinum:digits converte un float in una stringa con un livello di precisione appropriato.

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

Non esattamente ciò che l'OP ha richiesto, ma utile comunque.

1

In alternativa è possibile utilizzare la funzione si sta già utilizzando.

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

O per utenti elisir;)

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