2010-10-23 25 views
10

Estoy usando una función para crear una lista desde un flotante.Truncar un flotador en Erlang

float_to_list(0.02). 

Devuelve:

"2.00000000000000000000e-002" 

lo necesito para darme un número exactamente igual:

"0.20"

Si me alimenté 5,23

"5.23 "

Si me alimenté 5.5

"5,50"

Así que básicamente el número redondeado a dos decimales. Probablemente una solución fácil.

Gracias

EDIT:

me gustaría utilizar el formato io que parece que podría funcionar,

pero dosen't en este ejemplo:

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

Parece que textctrl quiere una cadena, no quiero imprimirla en la pantalla.

Respuesta

24

¿Está buscando algo como esto:

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

si sí, eche un vistazo al módulo io_lib.

+0

+1 por ser la única respuesta que menciona 'io_lib' - lo que da formato a cadenas (también conocido como listas), en lugar de simplemente imprimir la salida como' io'. – ndim

+0

¡Gracias por la ayuda! – BAR

+0

@ndim No es la única respuesta :( –

0

Sé que a las personas no les gustan las respuestas "No soy un experto en el lenguaje X", pero el comando printf es bastante omnipresente, así que diré que busquen un análogo de printf en Erlang.

Editar: Parece que el formato y fwrite pueden ser esos análogos. Para más información de erlang.org.

0

This link proporciona funciones que truncan/piso o celan o redondean un flotador. Teniendo en cuenta los que se pueden redondear a 2 dígitos multiplicando por 100, rounging y dividiendo vuelta por 100 (y, posiblemente, el redondeo de nuevo para evitar los errores de precisión)

3

mochinum:digits convierte un flotador en una cuerda con un nivel apropiado de precisión.

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

No es exactamente lo que el OP solicitó, pero útil de todos modos.

1

Alternativamente, podría utilizar la función que ya estaba utilizando.

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

O Elixir para los usuarios;)

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