domingo, 27 de marzo de 2016

Pregunta C# (17 de 20): ¿Cómo Redondear un Número Decimal a Dos Posiciones Decimales?

Índice

1. Introducción
2. Palabras Clave
3. Contexto
3.1 Especificadores estándar de formato número
3.1.1 Sobrecarga del método ToString()
3.1.2 Formato con llaves para parámetros
4. Redondeando un Número Decimal a Dos Posiciones
5. Recursos
6. Conclusiones
7. Literatura & Enlaces

1. Introducción

La manipulación de valores numéricos es quizás una de las tareas más comunes que se pueden llevar a cabo en aplicaciones financieras, científicas, matemáticas. En esta oportunidad se enseña al programador del lenguaje de programación C# a redondear un número decimal a dos posiciones decimales. Para lograrlo se usan lo que se conoce como especificadores de formato; que no son más que cadenas que definen el formato de presentación para valores numéricos.

2. Palabras Clave

  • Decimal
  • Especificador de formato
  • Método sobrecargado

3. Contexto

3.1 Especificadores estándar de formato numérico

En el lenguaje de programación C# se cuenta con un conjunto estándar de especificadores de formato para valores numéricos. La sintaxis para dar formato a valores numéricos sigue estas convenciones:

3.1.1 Sobrecarga del método ToString()

El método ToString() cuenta con una versión sobrecargada que recibe como argumento una cadena de caracteres a modo de formato de valores numéricos. Por ejemplo, en las siguientes líneas de código se utilizan distintos formatos numéricos para valores de moneda, decimales, exponentes:

decimal valor = 987.654m;
Console.WriteLine(valor.ToString("C2")); // $987.65

int valor = 12345;
Console.WriteLine(valor.ToString("D")); // 12345
Console.WriteLine(value.ToString("D8")); // 00012345

double valor = 12345.6789;
Console.WriteLine(valor.ToString("E", CultureInfo.InvariantCulture)); // 1.234568E+004

Nótese cómo en este último caso se utiliza otra de las versiones sobrecargadas de ToString() para especificar la presentación del valor de acuerdo a la configuración regional.

3.1.2 Formato con llaves para parámetros

En C# también se cuenta con un modo alternativo para la especificación del formato de valores numéricos. Éste consiste en el uso de llaves junto con un formato anidado:

{[formato]}

Los ejemplos de la sección anterior -3.1.1- quedan escritos así de acuerdo a este formato:

decimal value = 123.456m;
Console.WriteLine("{0:C2}.", value); $123.46

int valor = 12345;
Console.WriteLine("{0:D}", valor); // 12345
Console.WriteLine("{0:D8}", valor);; // 00012345

Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
double valor = 12345.6789;
Console.WriteLine("{0:E}", valor); // 1.234568E+004

[Nota: En el artículo presentado en "Standard Numeric Format Strings" (2016) se presenta la versión explicativa extendida de estos formatos de presentación de valores numéricos.]

4. Redondeando un Número Decimal a Dos Posiciones

Ahora se escribe un ejemplo con las diferentes variantes de formato de un número de decimal con dos posiciones de precisión:

En la línea 12 se declara la variable decimal valor con el valor 951753456.951753456M con 9 decimales de precisión. El valor original de esta variable se imprime en la salida estándar con la instrucción de la línea 13. Las líneas 17-20 llevan a cabo las siguientes operaciones:
  • Línea 17: usa el especificador de formato #.## para indicar que ToString() deberá imprimir el valor decimal con dos decimales.
  • Línea 18: con el formato {0:0.00} (equivalente a #.##) se indica que el valor decimal debe tener la misma precisión: 2 dígitos.
  • Línea 19: con la cadena de formato N2 se formatea el valor decimal con separador de unidades de mil y de decimal con dos decimales de precisión.
  • Línea 20: el especificador de formato {0:C} se formatea el valor decimal como un valor de moneda; también con dos decimales de precisión por defecto.
Compilación:

csc /t:exe FormatoDecimal.cs

Ejecución assembly

.\FormatoDecimal.exe

Demostración ejecución assembly (ideone.com): http://ideone.com/FWgkdR

951753456.951753456

951753456.95
951753456.95
951,753,456.95
$951,753,456.95


Demostración ejecución assembly (local): 
Ejecución assembly FormatoDecimal.exe
Figura 1. Ejecución assembly FormatoDecimal.exe.

5. Recursos

Este es el vídeo en donde el equipo de expertos Gerry O'Brein y Paul Pardi de MVA, responden y explican esta pregunta:

6. Conclusiones

En esta pregunta C# se demostró cómo formatear un valor decimal con dos decimales de precisión. Ahora se sabe que existen dos alternativas para formatear un valor decimal: con las versiones sobrecargadas de ToString() y las llaves de formato -{[formato]}.

En la próxima pregunta C# se responde cómo eliminar los valores duplicados de un arreglo.

7. Literatura & Enlaces

Top C# Questions Answered | Microsoft Virtual Academy (2016, marzo 27). Recuperado desde: https://mva.microsoft.com/en-US/training-courses/twenty-c-questions-answered-8298?l=yIsvPWYy_8204984382
Standard Numeric Format Strings (2016, marzo 27). Recuperado desde: https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx


V

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.