AYUDA .NET

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

El redondeo de números es un concepto matemático fundamental que se aplica a menudo en situaciones reales. En C#, el método Math.Round facilita esto al permitirte redondear valores al valor integral más cercano o a un número específico de lugares 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 tienes el número decimal 3.14159, redondearlo a dos decimales daría como resultado 3.14.

¿Por qué números redondos?

  1. Simplicity: Los números redondeados son a menudo 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 los cálculos monetarios.

Escenarios comunes de redondeo

  1. Nearest Integer: Redondea un valor decimal a su número entero más cercano.

  2. Número Específico de Decimales: Redondear un número a un número específico de lugares decimales, como redondear 15.678 a dos lugares decimales sería 15.68.

Fundamentos del redondeo en C#

C# ofrece un sistema robusto para redondear 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}")
$vbLabelText   $csharpLabel

En el ejemplo anterior, *4.5 está equidistante de 4 y 5. Dado que 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}")
$vbLabelText   $csharpLabel

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

Modos de redondeo del punto medio

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

Redondeo por defecto

De forma predeterminada, Math.Round redondea los valores de punto medio al número par más cercano.

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
$vbLabelText   $csharpLabel

Especificar un modo de MidpointRounding

Para proporcionar más control sobre la operación de redondeo para valores en el punto medio, puedes pasar un modo específico de MidpointRounding como un 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}")
$vbLabelText   $csharpLabel

En este ejemplo, el modo MidpointRounding.AwayFromZero asegura que el número se redondee 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}")
$vbLabelText   $csharpLabel

El número decimal 5.678 se 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 hacia arriba al número entero más cercano, puede usar 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}")
$vbLabelText   $csharpLabel

El número decimal 4.3 se redondea hacia arriba a 5.

Redondeo a la baja

Por el contrario, redondear hacia abajo al valor integral más cercano se realiza utilizando 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}")
$vbLabelText   $csharpLabel

El número decimal 4.7 se redondea hacia abajo 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}")
$vbLabelText   $csharpLabel

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}")
$vbLabelText   $csharpLabel

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

  • Double Precision: El tipo double podría no representar siempre los números decimales con exactitud, lo que puede conducir a resultados de redondeo inesperados. El uso del tipo decimal puede mitigar esto.
  • Modo Incorrecto de MidpointRounding: Asegúrese de utilizar el modo de 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. El Iron 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

C# Round (Cómo Funciona para Desarrolladores) Figura 1

IronPDF es una biblioteca robusta en C# diseñada para la generación de PDF a partir de HTML, edició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.

utilizando IronPdf;

usando System;

clase Programa

{

static void Main(string[] args)

{

// Datos de muestra para la factura

decimal itemPrice = 49.995m; // Precio del artículo antes de redondear

decimal taxRate = 0.18m; // Tasa de impuesto del 18%

// Redondear el precio a 2 decimales

decimal roundedPrice = Math.Round(itemPrice, 2);

// Calcula y redondea el monto del impuesto

decimal taxAmount = Math.Round(roundedPrice * taxRate, 2);

// Calcular el importe total

decimal totalAmount = Math.Round(roundedPrice + taxAmount, 2);

// Crear contenido HTML simple para el PDF

string htmlContent = $@"

Factura

        <p>Precio del artículo: ${roundedPrice}</p>
        <p>Impuesto (18%): ${taxAmount}</p>
        <hr>
        <h2>Cantidad Total: ${totalAmount}</h2>
    ";

// Generar PDF usando IronPDF

var renderer = new ChromePdfRenderer();

var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);

// Guardar el archivo PDF

pdfDocument.SaveAs("Invoice.pdf");

Console.WriteLine("Factura PDF generada exitosamente con valores redondeados.");

}

}

IronXL

Guía de C# (Cómo Funciona Para Desarrolladores) Figura 2

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

IronOCR

C# Round (Cómo Funciona para Desarrolladores) Figura 3

IronOCR es una avanzada biblioteca de Reconocimiento Óptico de Caracteres (OCR) para C# que puede reconocer y extraer texto de imágenes y PDFs. 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

C# Round (Cómo Funciona para Desarrolladores) Figura 4

IronBarcode es una herramienta poderosa para generar, leer y clasificar códigos de barras y códigos QR en .NET. En contextos donde los datos redondeados necesitan ser codificados en códigos de barras (por ejemplo, el precio de productos en una aplicación minorista), IronBarcode puede ser invaluable.

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 usar el tipo de datos adecuado (double o decimal) te capacitará para manejar datos numéricos de manera eficiente.

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 entra en juego el Iron Suite. Es un conjunto de herramientas que pueden ayudarle a trabajar con PDF, archivos Excel, texto en imágenes y códigos de barras.

Aquí está la parte emocionante: Puedes probar estas herramientas de forma gratuita con una licencia de prueba para ver si te gustan. Si decides comprar uno, cada uno cuesta $749. Pero si quieres comprarlas todas, puedes hacerte con el juego completo por sólo dos herramientas. ¡Es como obtener cuatro herramientas pero solo pagar por dos! Consulte la página de licencias de Iron Suite para obtener más información.

Chipego
Ingeniero de software
Chipego tiene una habilidad natural para escuchar que le ayuda a comprender los problemas de los clientes y a ofrecer soluciones inteligentes. Se unió al equipo de Iron Software en 2023, después de estudiar una licenciatura en Tecnología de la Información. IronPDF e IronOCR son los dos productos en los que Chipego se ha centrado, pero su conocimiento de todos los productos crece día a día, a medida que encuentra nuevas formas de ayudar a los clientes. Disfruta de lo colaborativa que es la vida en Iron Software, con miembros del equipo de toda la empresa que aportan su variada experiencia para contribuir a soluciones eficaces e innovadoras. Cuando Chipego está lejos de su escritorio, a menudo se le puede encontrar disfrutando de un buen libro o jugando al fútbol.
< ANTERIOR
Diccionario C# Trygetvalue (Cómo funciona para desarrolladores)
SIGUIENTE >
Operadores lógicos de C# (Cómo funciona para desarrolladores)