2008-12-18 24 views
8

Supongamos que tengo una variable de tipo Int = 08, ¿cómo puedo convertir esto a String manteniendo el cero inicial?Convertir haskell Int con cero inicial a la cadena

Por ejemplo:

v :: Int 
v = 08 

show v 

de salida: 8

Quiero que la salida sea "08".

¿Esto es posible?

+0

de Operaciones, la salida es en realidad "8", no 8 –

+1

Um, decir v = 08 es lo mismo que decir v = 8 o v = 008 ov = 0000008. No hay forma de recuperar la información de cuántos ceros has definido v usando. Solo puede imprimirlo con un número determinado de 0, como en la respuesta a continuación. – ShreevatsaR

Respuesta

3

Dependiendo de lo que está planeando hacer es posible que desee almacenar el "08" como una cadena y sólo convertir a int cuando se necesita el valor.

+4

Hacer lo contrario suena mejor. Guárdelo como int y cámbielo a cadena para mostrarlo. –

19

Uso Text.Printf.printf:

printf "%02d" v 

asegúrese de importar Text.Printf.printf primero.

+0

es simplemente 'import Text.Printf' – cevaris

+2

O' import Text.Printf (printf) ' –

8

Es 8, no 08 en la variable v. Sí, lo asignó 08 pero recibe 8. Es la razón show método lo mostró como 8. Puede usar the work around given by Mipadi.

Editar:

salida de una prueba.

Prelude> Text.Printf.printf "%01d\n" 08 
8 
Prelude> Text.Printf.printf "%02d\n" 08 
08 
Prelude> Text.Printf.printf "%03d\n" 08 
008 

Salida de otra prueba.

Prelude> show 08 
"8" 
Prelude> show 008 
"8" 
Prelude> show 0008 
"8" 

Espero que entiendas el punto.

Editar:

encontrado otra solución. Prueba de esto,

"0" ++ show v 
1

La forma printf es probablemente el mejor, pero es bastante fácil de escribir su propia función:

show2d :: Int -> String 
show2d n | length (show n) == 1 = "0" ++ (show n) 
     | otherwise = show n 

funciona como sigue:

Prelude> show2d 1 
"01" 
Prelude> show2d 10 
"10" 
Prelude> show2d 100 
"100"