DEV Community

loading...
Cover image for Interpolación y formato de cadenas de texto en Rust, parte 2

Interpolación y formato de cadenas de texto en Rust, parte 2

marioeninternet profile image Mario Martínez Updated on ・3 min read

Luego de haber visitado el tema del posicionamiento de parámetros en la interpolación de valores dentro de cadenas de texto con Rust, vamos a explorar el formateo de valores con algunos casos prácticos.

Precisión decimal

Siguiendo con el ejemplo del planeta Marte, vamos a formatear la precisión del valor de órbita para que muestre únicamente dos números luego del punto decimal.

fn main() {
  let planeta = "Marte";
  let orb = 686.971;
  println!("A los {orbita:.2} días, {nombre} da una vuelta completa al Sol.",
    nombre = planeta,
    orbita = orb);
}
Enter fullscreen mode Exit fullscreen mode
>> A los 686.97 días, Marte da una vuelta completa al Sol.
Enter fullscreen mode Exit fullscreen mode

Sencillo, ¿no?. Dentro del marcador de posición para órbita hemos agregado ":.2".

El formato de precisión rendondea el número, como se puede apreciar en los siguientes ejemplos:

fn main() {
  println!("{:.0}", 5.51); // -> 6
  println!("{:.0}", 5.50); // -> 6
  println!("{:.0}", 5.49); // -> 5
}
Enter fullscreen mode Exit fullscreen mode

Cuando el formato de precisión excede la cantidad de decimales del número original, se rellenarán las posiciones restantes con ceros:

fn main() {
  println!("{:.5}", 5.51); // -> 5.51000
  println!("{:.5}", 5.50); // -> 5.50000
  println!("{:.5}", 5.49); // -> 5.49000
}
Enter fullscreen mode Exit fullscreen mode

El parámetro de precisión también puede ser nombrado:

fn main() {
  println!("{:.prec$}", 5.56, prec = 1); // -> 5.6
}
Enter fullscreen mode Exit fullscreen mode

El parámetro nombrado tiene efecto si se le acompaña con el signo $ al final.

Ancho y alineación

Podemos establecer el ancho mínimo que ocupará un valor, un recurso ideal para distribuir con exactitud información sobre la pantalla.

fn main() {
  println!("{:>20} {}", "NOMBRE:", "Jupiter");
  println!("{:>20} {} días" , "PERÍODO ORBITAL:", 4332.59);
  println!("{:>20} {} km/s", "VELOCIDAD ORBITAL:", 13.07);
  println!("{:>20} {} Tierras", "RADIO ECUATORIAL:", 11.209);
}
Enter fullscreen mode Exit fullscreen mode

Este código devolverá algo como lo siguiente:

             NOMBRE: Júpiter
    PERÍODO ORBITAL: 4332.59 días
  VELOCIDAD ORBITAL: 13.07 km/s
   RADIO ECUATORIAL: 11.209 Tierras
Enter fullscreen mode Exit fullscreen mode

Con {:>20} estamos definiendo que los textos en la primera posición van a ocupar 20 espacios alineando a la derecha el contenido.

La alineación se puede definir de tres modos:

  • > Derecha
  • < Izquierda
  • ^ Centrado

Con todo lo aprendido podemos presentar datos en forma de columnas:

fn main() {
  println!("{:^12}\t{:^12}", "PLANETA", "ÓRBITA");
  println!("{:^12}\t{:^12.2}", "Tierra", 365.256);
  println!("{:^12}\t{:^12.2}", "Marte", 686.971);
  println!("{:^12}\t{:^12.2}", "Júpiter", 4332.59);
}
Enter fullscreen mode Exit fullscreen mode

Que nos devuelve algo como esto:

    PLANETA       ÓRBITA
     Tierra       365.26
     Marte        686.97
    Júpiter      4332.59
Enter fullscreen mode Exit fullscreen mode

Mientras que con {:^12} le indicamos a println! que designe 12 espacios de ancho al primer texto alineándolo al centro, con {:^12.2} estamos haciendo lo mismo a la segunda cantidad al tiempo que le limitamos a presentar dos números luego del punto decimal. En medio de ambos marcadores de posición estamos colocando un salto de tabulador con \t.

Rellenando

Es posible definir un carácter de relleno, como en el siguiente ejemplo:

fn main() {
  println!("{:-^12}\t{:-^12}", "PLANETA", "ÓRBITA");
}
Enter fullscreen mode Exit fullscreen mode

Que resulta en lo siguiente:

--PLANETA---    ---ÓRBITA---
Enter fullscreen mode Exit fullscreen mode

Ahora los que antes eran espacios en blanco han sido ocupados con guiones medios -.

¿Qué tal si usamos esta posibilidad en nuestra anterior tabla de planetas para separar nuestros encabezados de los datos con líneas de guiones?.

fn main() {
  println!("{:^12}\t{:^12}", "PLANETA", "ÓRBITA");
  println!("{:-^12}\t{:-^12}", "", "");
  println!("{:^12}\t{:^12.2}", "Tierra", 365.256);
  println!("{:^12}\t{:^12.2}", "Marte", 686.971);
  println!("{:^12}\t{:^12.2}", "Júpiter", 4332.59);
}
Enter fullscreen mode Exit fullscreen mode

Que resulta en lo siguiente:

    PLANETA          ÓRBITA
  ------------    ------------
     Tierra          365.26
     Marte           686.97
    Júpiter         4332.59
Enter fullscreen mode Exit fullscreen mode

Fin de la segunda parte.


Comunidad mexicana de Rust


Nota: el texto fue publicado originalmente el 19 de julio de 2017 en Medium y lo he migrado a Dev.to el 11 de septiembre de 2019 con actualizaciones mínimas.

Discussion

pic
Editor guide