AYUDA .NET

C# Round (Cómo funciona para los desarrolladores)

Publicado en 29 de agosto, 2023
Compartir:

El redondeo de números es un concepto matemático fundamental que se aplica a menudo en situaciones reales. En C#, la funciónMétodo `Math.Round le facilita esta tarea permitiéndole redondear los valores a la integral más próxima o a un número determinado de decimales. Este tutorial profundiza en los matices del redondeo en C# e ilustra cómo se puede aprovechar este potente método.

Introducción al redondeo

Redondear un número implica ajustarlo al valor entero o decimal más próximo para simplificarlo o ajustarlo a un requisito concreto. Por ejemplo, cuando se tiene el número decimal 3,14159, redondeándolo a dos decimales se obtendría 3,14.

¿Por qué números redondos?

  1. Simplicidad: Los números redondeados suelen ser más fáciles de leer y comprender.

  2. Precisión En algunos casos, operar con valores redondeados en lugar de exactos es más eficiente, especialmente en contextos como el cálculo de divisas.

Escenarios comunes de redondeo

  1. Número entero más próximo: Redondea un valor decimal al número entero más próximo.

  2. Número especificado de decimales: Redondea un número a un número específico de decimales, como redondear 15.678 a dos decimales sería 15.68.

Fundamentos del redondeo en C#

C# ofrece un sistema robusto para el redondeo a través del método Math.Round. Este método puede aceptar varios argumentos y parámetros para personalizar la operación de redondeo.

Redondeo a la integral más próxima

La forma más simple del método Math.Round redondea un valor doble al valor integral más cercano. Si el número dado es equidistante de dos enteros, redondea al número par más próximo, lo que se suele llamar "redondeo bancario".

double originalValue = 4.5;
double roundedValue = Math.Round(originalValue);
Console.WriteLine($"Original: {originalValue}, Rounded: {roundedValue}");
double originalValue = 4.5;
double roundedValue = Math.Round(originalValue);
Console.WriteLine($"Original: {originalValue}, Rounded: {roundedValue}");
Dim originalValue As Double = 4.5
Dim roundedValue As Double = Math.Round(originalValue)
Console.WriteLine($"Original: {originalValue}, Rounded: {roundedValue}")
VB   C#

En el ejemplo anterior, *4,5 es equidistante de 4 y 5. Como 4 es el número par más cercano, el método devuelve 4.

Redondeo a un número determinado de decimales

También puede redondear un punto flotante de doble precisión a un número especificado de decimales utilizando un argumento adicional:

double value = 7.34567;
double rounded = Math.Round(value, 2); // Rounds to two decimal places
Console.WriteLine($"Original: {value}, Rounded: {rounded}");
double value = 7.34567;
double rounded = Math.Round(value, 2); // Rounds to two decimal places
Console.WriteLine($"Original: {value}, Rounded: {rounded}");
Dim value As Double = 7.34567
Dim rounded As Double = Math.Round(value, 2) ' Rounds to two decimal places
Console.WriteLine($"Original: {value}, Rounded: {rounded}")
VB   C#

El método redondea el valor original 7.34567 a 7.35 ya que hemos especificado que redondee a dos decimales.

Modos de redondeo del punto medio

Cuando se trata de valores de punto medio(los equidistantes de dos valores potencialmente redondeados)C# ofrece un modo MidpointRounding para determinar cómo se redondean estos valores.

Redondeo por defecto

Por defecto, Math.Round redondea los valores del punto medio al número par más próximo.

double valueOne = 4.5;  // Rounded to 4
double valueTwo = 5.5;  // Rounded to 6
double valueOne = 4.5;  // Rounded to 4
double valueTwo = 5.5;  // Rounded to 6
Dim valueOne As Double = 4.5 ' Rounded to 4
Dim valueTwo As Double = 5.5 ' Rounded to 6
VB   C#

Especificación del modo `MidpointRounding

Para proporcionar un mayor control sobre la operación de redondeo de los valores de punto medio, puede pasar un modo específico MidpointRounding como parámetro:

double value = 5.5;
double rounded = Math.Round(value, 0, MidpointRounding.AwayFromZero);
Console.WriteLine($"Original: {value}, Rounded: {rounded}");
double value = 5.5;
double rounded = Math.Round(value, 0, MidpointRounding.AwayFromZero);
Console.WriteLine($"Original: {value}, Rounded: {rounded}");
Dim value As Double = 5.5
Dim rounded As Double = Math.Round(value, 0, MidpointRounding.AwayFromZero)
Console.WriteLine($"Original: {value}, Rounded: {rounded}")
VB   C#

En este ejemplo, el modo MidpointRounding.AwayFromZero asegura que el número se redondea a 6.

Uso de Math.Round con valores decimales

Aunque ya hemos hablado del redondeo de valores dobles, C# también admite el redondeo de valores decimales. Los métodos son análogos, pero trabajan con el tipo de datos decimal. He aquí un ejemplo

decimal decimalValue = 5.678m;
decimal roundedDecimal = Math.Round(decimalValue, 1); // Rounds to one decimal place
Console.WriteLine($"Original: {decimalValue}, Rounded: {roundedDecimal}");
decimal decimalValue = 5.678m;
decimal roundedDecimal = Math.Round(decimalValue, 1); // Rounds to one decimal place
Console.WriteLine($"Original: {decimalValue}, Rounded: {roundedDecimal}");
Dim decimalValue As Decimal = 5.678D
Dim roundedDecimal As Decimal = Math.Round(decimalValue, 1) ' Rounds to one decimal place
Console.WriteLine($"Original: {decimalValue}, Rounded: {roundedDecimal}")
VB   C#

El número decimal 5.678 redondea a 5.7 cuando se redondea a un decimal.

Funciones de redondeo personalizadas

A veces, es posible que necesite realizar operaciones de redondeo específicas no cubiertas por el método estándar Math.Round. Escribir funciones de redondeo personalizadas le proporciona un control total sobre el proceso.

Redondeo

Para redondear siempre al entero más cercano, puedes utilizar el método Math.Ceiling:

double value = 4.3;
double roundedUp = Math.Ceiling(value);
Console.WriteLine($"Original: {value}, Rounded Up: {roundedUp}");
double value = 4.3;
double roundedUp = Math.Ceiling(value);
Console.WriteLine($"Original: {value}, Rounded Up: {roundedUp}");
Dim value As Double = 4.3
Dim roundedUp As Double = Math.Ceiling(value)
Console.WriteLine($"Original: {value}, Rounded Up: {roundedUp}")
VB   C#

El número decimal "4,3" se redondea a "5".

Redondeo a la baja

Por el contrario, el redondeo a la integral más próxima se realiza mediante el método Math.Floor:

double value = 4.7;
double roundedDown = Math.Floor(value);
Console.WriteLine($"Original: {value}, Rounded Down: {roundedDown}");
double value = 4.7;
double roundedDown = Math.Floor(value);
Console.WriteLine($"Original: {value}, Rounded Down: {roundedDown}");
Dim value As Double = 4.7
Dim roundedDown As Double = Math.Floor(value)
Console.WriteLine($"Original: {value}, Rounded Down: {roundedDown}")
VB   C#

El número decimal "4,7" se redondea a "4".

Trabajar con cadenas

En muchas aplicaciones, es posible que maneje valores numéricos como cadenas. La conversión de la cadena a un valor doble o decimal, el redondeo y la conversión posterior se pueden realizar con C#.

Análisis sintáctico y redondeo

He aquí un ejemplo de cómo redondear una cadena que contiene un número decimal:

string originalString = "4.5678";
double parsedValue = double.Parse(originalString);
double rounded = Math.Round(parsedValue, 2); // Rounds to two decimal places
string roundedString = rounded.ToString();
Console.WriteLine($"Original: {originalString}, Rounded: {roundedString}");
string originalString = "4.5678";
double parsedValue = double.Parse(originalString);
double rounded = Math.Round(parsedValue, 2); // Rounds to two decimal places
string roundedString = rounded.ToString();
Console.WriteLine($"Original: {originalString}, Rounded: {roundedString}");
Dim originalString As String = "4.5678"
Dim parsedValue As Double = Double.Parse(originalString)
Dim rounded As Double = Math.Round(parsedValue, 2) ' Rounds to two decimal places
Dim roundedString As String = rounded.ToString()
Console.WriteLine($"Original: {originalString}, Rounded: {roundedString}")
VB   C#

Original: 4.5678, Redondeado: 4.57

Redondeo en aplicaciones financieras

Cuando se trabaja con aplicaciones financieras, la precisión es vital. Los errores de redondeo pueden provocar problemas importantes. En estos casos, se prefiere el tipo decimal debido a su mayor precisión en comparación con double.

Ejemplo Redondeo Moneda

El siguiente ejemplo muestra el redondeo de un valor decimal que representa moneda:

decimal originalValue = 1234.5678m;
decimal roundedValue = Math.Round(originalValue, 2, MidpointRounding.AwayFromZero);
Console.WriteLine($"Original: {originalValue:C}, Rounded: {roundedValue:C}");
decimal originalValue = 1234.5678m;
decimal roundedValue = Math.Round(originalValue, 2, MidpointRounding.AwayFromZero);
Console.WriteLine($"Original: {originalValue:C}, Rounded: {roundedValue:C}");
Dim originalValue As Decimal = 1234.5678D
Dim roundedValue As Decimal = Math.Round(originalValue, 2, MidpointRounding.AwayFromZero)
Console.WriteLine($"Original: {originalValue:C}, Rounded: {roundedValue:C}")
VB   C#

El código anterior redondea el valor a dos decimales, de acuerdo con la mayoría de las normas monetarias.

Depuración y solución de errores de redondeo

En ocasiones, las operaciones de redondeo pueden no dar los resultados esperados. Estas discrepancias podrían deberse a cuestiones como la precisión en coma flotante con valores dobles.

Errores comunes

  • Precisión doble: Es posible que el tipo double no siempre represente números decimales con exactitud, dando lugar a resultados de redondeo inesperados. El uso del tipo decimal puede mitigar esto.
  • Modo "MidpointRounding" incorrecto: Asegúrese de utilizar el modo "MidpointRounding" correcto para sus requisitos específicos. El uso incorrecto de estos modos puede dar lugar a errores de redondeo.

Cómo depurar

Utilice herramientas como el registro y los puntos de interrupción para rastrear el valor antes y después del redondeo. Inspeccionar el valor original y los parámetros pasados al método de redondeo suele revelar incoherencias.

Iron Suite

Después de dominar los conceptos básicos del redondeo en C#, es posible que se pregunte cómo llevar sus aplicaciones al siguiente nivel, especialmente cuando se trata de formatos de datos complejos. EnIron Suite puede ser tu salvador aquí. Este paquete incluye potentes herramientas como IronPDF, IronXL, IronOCR e IronBarcode. Profundicemos en cómo estas herramientas pueden integrarse en sus operaciones de redondeo y enriquecer aún más sus aplicaciones.

IronPDF

Ronda C(Cómo funciona para los desarrolladores) Figura 1

IronPDF es una robusta biblioteca en C# diseñada paraGeneración de PDF a partir de HTMLedición y gestión. Imagine una situación en la que necesita generar un informe en formato PDF después de realizar operaciones de redondeo. IronPDF puede convertir sin esfuerzo su código C# en PDF de alta calidad.

IronXL

Ronda C(Cómo funciona para los desarrolladores) Figura 2

IronXL proporciona funcionalidades para trabajar con archivos Excel, permitiendo a los desarrolladores de C# leer, escribir y manipular hojas de cálculo Excel sin problemas. Con IronXL, puede recuperar datos decimales o dobles de hojas de Excel, realizar operaciones de redondeo en C#.

IronOCR

Ronda C(Cómo funciona para los desarrolladores) Figura 3

IronOCR es un sistema avanzado de reconocimiento óptico de caracteres(OCR) para C# que puede reconocer y extraer texto de imágenes y archivos PDF. Supongamos que ha escaneado documentos o imágenes que contienen datos numéricos. Con IronOCR, puede extraer estos datos, procesarlos o redondearlos en C#.

IronBarcode

Ronda C(Cómo funciona para los desarrolladores) Figura 4

IronBarcode es una potente herramienta para generar, leer y clasificar códigos de barras y códigos QR en .NET. En contextos en los que es necesario codificar datos redondeados en códigos de barras(por ejemplo, precios de productos en una aplicación de venta al por menor)IronBarcode puede ser muy valioso.

Conclusión

El redondeo en C# es un tema polifacético con aplicaciones en diversos ámbitos. Comprender los métodos incorporados como Math.Round, Math.Floor, y Math.Ceiling, y saber cuándo utilizar el tipo de datos apropiado.(doble o decimal) le permitirá manejar datos numéricos con eficacia.

El redondeo en C# facilita el trabajo con los números. Pero, ¿y si quieres hacer aún más con esas cifras? Ahí es donde elIron Suite entra. Es un conjunto de herramientas que pueden ayudarle a trabajar con PDF, archivos Excel, texto en imágenes y códigos de barras.

Esto es lo mejor: Puedes probar estas herramientas gratis con unlicencia de prueba para ver si te gustan. Si decides comprar una, cada una cuesta $749. Pero si quieres comprarlas todas, puedes hacerte con el juego completo por sólo dos herramientas. Es como tener cuatro herramientas pero pagar sólo por dos.! Echa un vistazo a lapágina de licencia para más información.

< ANTERIOR
Diccionario C# Trygetvalue (Cómo funciona para desarrolladores)
SIGUIENTE >
Operadores lógicos de C# (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.12 acaba de salir

Descarga gratuita de NuGet Descargas totales: 11,622,374 Ver licencias >