Pruebas en un entorno real
Pruebe en producción sin marcas de agua.
Funciona donde lo necesites.
En el ámbito de la programación en C#, el método de valor Math.Round desempeña un papel fundamental en el redondeo de valores numéricos, especialmente cuando se trata de tipos de datos de valor doble y decimal. Este método permite a los desarrolladores redondear un valor numérico dado al valor integral más cercano o a un número especificado de dígitos fraccionarios menos, proporcionando flexibilidad y precisión en las operaciones matemáticas. Existen varios tipos de redondeo, como el redondeo del punto medio. En este artículo, nos adentraremos en los entresijos de Math.Round en C#, explorando sus diversos aspectos y escenarios de uso. En las secciones siguientes de este artículo, exploraremos la utilización del IronPDF biblioteca de Iron Software para la gestión de archivos PDF.
El método Math.Round en C# es una potente herramienta para redondear dígitos fraccionarios utilizando la convención de redondeo especificada. Forma parte del espacio de nombres System y proporciona varias sobrecargas para acomodar diferentes operaciones de redondeo.
/* methods overloaded by Math.Round
Math.Round(Double)
Math.Round(Double, Int32) // int32 specifies number of fractional digits
Math.Round(Double, Int32, MidpointRounding) // int32 specifies number of fractional digits, MidpointRounding type of rounding method
Math.Round(Double, MidpointRounding) // MidpointRounding type of rounding method
Math.Round(Decimal)
Math.Round(Decimal, Int32) // int32 specifies number of fractional digits
Math.Round(Decimal, Int32, MidpointRounding)
Math.Round(Decimal, MidpointRounding)
*/
/* methods overloaded by Math.Round
Math.Round(Double)
Math.Round(Double, Int32) // int32 specifies number of fractional digits
Math.Round(Double, Int32, MidpointRounding) // int32 specifies number of fractional digits, MidpointRounding type of rounding method
Math.Round(Double, MidpointRounding) // MidpointRounding type of rounding method
Math.Round(Decimal)
Math.Round(Decimal, Int32) // int32 specifies number of fractional digits
Math.Round(Decimal, Int32, MidpointRounding)
Math.Round(Decimal, MidpointRounding)
*/
' methods overloaded by Math.Round
'Math.Round(Double)
'Math.Round(Double, Int32) // int32 specifies number of fractional digits
'Math.Round(Double, Int32, MidpointRounding) // int32 specifies number of fractional digits, MidpointRounding type of rounding method
'Math.Round(Double, MidpointRounding) // MidpointRounding type of rounding method
'Math.Round(Decimal)
'Math.Round(Decimal, Int32) // int32 specifies number of fractional digits
'Math.Round(Decimal, Int32, MidpointRounding)
'Math.Round(Decimal, MidpointRounding)
'
Cuando se trabaja con valores dobles, se suele utilizar Math.Round para redondear un número al entero más próximo. Por ejemplo:
double originalValue = 3.75;
double roundedValue = Math.Round(originalValue);
// Output: 4
double originalValue = 3.75;
double roundedValue = Math.Round(originalValue);
// Output: 4
Dim originalValue As Double = 3.75
Dim roundedValue As Double = Math.Round(originalValue)
' Output: 4
En este ejemplo, el método Math.Round redondeó el valor doble original 3.75 al valor integral más cercano, que es 4.
Del mismo modo, el método Math.Round se aplica a los valores decimales. Considere el siguiente ejemplo:
decimal originalValue = 8.625m;
decimal roundedValue = Math.Round(originalValue, 2);
// Output: 8.63
decimal originalValue = 8.625m;
decimal roundedValue = Math.Round(originalValue, 2);
// Output: 8.63
Dim originalValue As Decimal = 8.625D
Dim roundedValue As Decimal = Math.Round(originalValue, 2)
' Output: 8.63
Aquí, el método Math.Round se utiliza para redondear el número decimal 8.625 a dos decimales, dando como resultado el valor redondeado 8.63.
El propósito principal de Math.Round es redondear un valor numérico dado al entero más cercano. Si la parte fraccionaria está exactamente a medio camino entre dos números enteros, el método sigue una convención de operaciones de redondeo especificada. La enumeración MidpointRounding se puede utilizar como argumento en el método Math.Round, determina si se redondea hacia el número par o impar más cercano.
Son posibles varios tipos de operaciones de redondeo, como se muestra en la imagen anterior. Los nombres se explican por sí solos.
Exploremos cómo puede emplearse el modo MidpointRounding:
double originalValue = 5.5;
double roundedValueEven = Math.Round(originalValue, MidpointRounding.ToEven);
double roundedValueOdd = Math.Round(originalValue, MidpointRounding.AwayFromZero);
// Output: roundedValueEven = 6, roundedValueOdd = 5
double originalValue = 5.5;
double roundedValueEven = Math.Round(originalValue, MidpointRounding.ToEven);
double roundedValueOdd = Math.Round(originalValue, MidpointRounding.AwayFromZero);
// Output: roundedValueEven = 6, roundedValueOdd = 5
Dim originalValue As Double = 5.5
Dim roundedValueEven As Double = Math.Round(originalValue, MidpointRounding.ToEven)
Dim roundedValueOdd As Double = Math.Round(originalValue, MidpointRounding.AwayFromZero)
' Output: roundedValueEven = 6, roundedValueOdd = 5
En este ejemplo, al redondear el valor a 5,5, MidpointRounding.ToEven redondea hacia el número par más próximo (con un resultado de 6)mientras que MidpointRounding.AwayFromZero redondea a partir de cero, obteniendo 5.
Para redondear un número a un número determinado de decimales, el método Math.Round permite incluir un parámetro adicional que representa el número de dígitos int:
decimal originalValue = 9.123456m;
decimal roundedValue = Math.Round(originalValue, 3); // round values
// Output: 9.123
decimal originalValue = 9.123456m;
decimal roundedValue = Math.Round(originalValue, 3); // round values
// Output: 9.123
Dim originalValue As Decimal = 9.123456D
Dim roundedValue As Decimal = Math.Round(originalValue, 3) ' round values
' Output: 9.123
Aquí, el número decimal 9,123456 se redondea a tres decimales, lo que da como resultado el valor redondeado 9,123.
Un valor de punto medio se produce cuando el valor después del dígito menos significativo del resultado está exactamente a medio camino entre dos números. Por ejemplo, 2,56500 es un valor de punto medio cuando se redondea a dos decimales 2,57, y 3,500 es un valor de punto medio cuando se redondea a un entero 4. El reto consiste en identificar el valor más próximo en la estrategia de redondeo para valores de punto medio sin una convención de redondeo definida.
El método Round en C# soporta dos convenciones de redondeo para manejar valores de punto medio:
Redondeo a partir de cero: Los valores del punto medio se redondean al número siguiente a cero. Por ejemplo, 3.75 se redondea a 3.8, 3.85 se redondea a 3.9, -3.75 se redondea a -3.8, y -3.85 se redondea a -3.9. Este método está representado por el miembro de la enumeración MidpointRounding.AwayFromZero.
Redondeo al par más próximo (Redondeo bancario): Los valores del punto medio se redondean al número par más próximo. Los casos incluyen tanto 3,75 como 3,85 redondeando a 3,8, y tanto -3,75 como -3,85 redondeando a -3,8. Este método de redondeo se indica mediante el miembro de la enumeración MidpointRounding.ToEven.
decimal [] decimalSampleValues = { 1.15m, 1.25m, 1.35m, 1.45m, 1.55m, 1.65m };
decimal sum = 0;
// Calculate true mean values.
foreach (var value in decimalSampleValues)
{
sum += value;
}
// print
Console.WriteLine("True mean values: {0:N2}", sum / decimalSampleValues.Length);
// Calculate mean values with rounding away from zero.
sum = 0;
foreach (var value in decimalSampleValues)
{
sum += Math.Round(value, 1, MidpointRounding.AwayFromZero);
}
// print
Console.WriteLine("AwayFromZero: {0:N2}", sum / decimalSampleValues.Length);
// Calculate mean values with rounding to nearest.
sum = 0;
foreach (var value in decimalSampleValues)
{
sum += Math.Round(value, 1, MidpointRounding.ToEven);
}
// print
Console.WriteLine("ToEven: {0:N2}", sum / decimalSampleValues.Length);
decimal [] decimalSampleValues = { 1.15m, 1.25m, 1.35m, 1.45m, 1.55m, 1.65m };
decimal sum = 0;
// Calculate true mean values.
foreach (var value in decimalSampleValues)
{
sum += value;
}
// print
Console.WriteLine("True mean values: {0:N2}", sum / decimalSampleValues.Length);
// Calculate mean values with rounding away from zero.
sum = 0;
foreach (var value in decimalSampleValues)
{
sum += Math.Round(value, 1, MidpointRounding.AwayFromZero);
}
// print
Console.WriteLine("AwayFromZero: {0:N2}", sum / decimalSampleValues.Length);
// Calculate mean values with rounding to nearest.
sum = 0;
foreach (var value in decimalSampleValues)
{
sum += Math.Round(value, 1, MidpointRounding.ToEven);
}
// print
Console.WriteLine("ToEven: {0:N2}", sum / decimalSampleValues.Length);
Dim decimalSampleValues() As Decimal = { 1.15D, 1.25D, 1.35D, 1.45D, 1.55D, 1.65D }
Dim sum As Decimal = 0
' Calculate true mean values.
For Each value In decimalSampleValues
sum += value
Next value
' print
Console.WriteLine("True mean values: {0:N2}", sum / decimalSampleValues.Length)
' Calculate mean values with rounding away from zero.
sum = 0
For Each value In decimalSampleValues
sum += Math.Round(value, 1, MidpointRounding.AwayFromZero)
Next value
' print
Console.WriteLine("AwayFromZero: {0:N2}", sum / decimalSampleValues.Length)
' Calculate mean values with rounding to nearest.
sum = 0
For Each value In decimalSampleValues
sum += Math.Round(value, 1, MidpointRounding.ToEven)
Next value
' print
Console.WriteLine("ToEven: {0:N2}", sum / decimalSampleValues.Length)
La estrategia de redondeo AwayFromZero redondea al número más cercano, cuando un número está a medio camino entre otros dos.
Esta estrategia se caracteriza por el redondeo dirigido hacia cero. El resultado es el más cercano y no mayor en magnitud que el resultado infinitamente preciso.
Esta estrategia consiste en redondear al número más próximo, y cuando un número está a medio camino entre otros dos, se redondea hacia el número par más próximo.
Esta estrategia implica redondear en sentido descendente, siendo el resultado lo más cercano y no mayor que el resultado infinitamente preciso.
Esta estrategia consiste en redondear en sentido ascendente, siendo el resultado lo más cercano y no inferior al resultado infinitamente preciso.
Cuando se trabaja con números en coma flotante de doble precisión, es esencial comprender la imprecisión potencial debida a la naturaleza de la representación en coma flotante. El método Math.Round ayuda a mitigar los problemas de precisión redondeando los valores al entero más cercano o a un número especificado de decimales.
Los desarrolladores pueden aprovechar el método Math.Round para conseguir la precisión deseada en sus cálculos:
double originalValue = 123.456789;
double result = Math.Round(originalValue, 4);
// Output: 123.4568, rounded value
double originalValue = 123.456789;
double result = Math.Round(originalValue, 4);
// Output: 123.4568, rounded value
Dim originalValue As Double = 123.456789
Dim result As Double = Math.Round(originalValue, 4)
' Output: 123.4568, rounded value
En este ejemplo, el valor doble 123,456789 se redondea a cuatro decimales, lo que da como resultado el valor más preciso 123,4568.
La estrategia de redondeo del punto medio resulta crucial cuando un valor fraccionario se encuentra exactamente a medio camino entre dos números enteros. El método Math.Round emplea la estrategia MidpointRounding especificada para resolver estos casos.
Considere el siguiente ejemplo en el que se utiliza el redondeo del punto medio:
double originalValue = 7.5;
double roundedValue = Math.Round(originalValue, MidpointRounding.AwayFromZero);
// Output: 8
double originalValue = 7.5;
double roundedValue = Math.Round(originalValue, MidpointRounding.AwayFromZero);
// Output: 8
Dim originalValue As Double = 7.5
Dim roundedValue As Double = Math.Round(originalValue, MidpointRounding.AwayFromZero)
' Output: 8
Aquí, el valor 7,5 se redondea a partir de cero, lo que da como resultado el valor redondeado 8.
He aquí algunos ejemplos de su aplicación en diversos contextos:
En las aplicaciones financieras, el redondeo preciso es crucial. Por ejemplo, al calcular tipos de interés, convertir divisas o realizar cálculos fiscales, puede emplearse el método Math.Round para garantizar que los resultados se redondean al número adecuado de decimales, respetando las normas financieras.
double interestRate = 0.04567;
double roundedInterest = Math.Round(interestRate, 4); // Round to 4 decimal places
double interestRate = 0.04567;
double roundedInterest = Math.Round(interestRate, 4); // Round to 4 decimal places
Dim interestRate As Double = 0.04567
Dim roundedInterest As Double = Math.Round(interestRate, 4) ' Round to 4 decimal places
Cuando se presentan valores numéricos en una interfaz de usuario, es habitual redondear los números para mejorar la legibilidad. Por ejemplo, en un cuadro de mandos que muestre lecturas de temperatura o datos financieros, el redondeo mediante Math.Round puede mejorar la claridad de la información presentada.
double temperature = 23.678;
double roundedTemperature = Math.Round(temperature, 1); // Round to 1 decimal place
double temperature = 23.678;
double roundedTemperature = Math.Round(temperature, 1); // Round to 1 decimal place
Dim temperature As Double = 23.678
Dim roundedTemperature As Double = Math.Round(temperature, 1) ' Round to 1 decimal place
En el análisis estadístico, el redondeo preciso es esencial para evitar introducir sesgos o imprecisiones. Ya sea para calcular la media, la mediana u otras medidas estadísticas, el método Math.Round puede ayudar a presentar los resultados con el nivel de precisión deseado.
double meanValue = CalculateMean(data);
double roundedMean = Math.Round(meanValue, 2); // Round mean value to 2 decimal places
double meanValue = CalculateMean(data);
double roundedMean = Math.Round(meanValue, 2); // Round mean value to 2 decimal places
Dim meanValue As Double = CalculateMean(data)
Dim roundedMean As Double = Math.Round(meanValue, 2) ' Round mean value to 2 decimal places
En las aplicaciones científicas, la precisión es crucial. Cuando se trabaja con datos experimentales o cálculos científicos, el redondeo mediante Math.Round garantiza que los resultados se presenten de forma significativa y precisa.
double experimentalResult = 9.87654321;
double roundedResult = Math.Round(experimentalResult, 5); // Round to 5 decimal places
double experimentalResult = 9.87654321;
double roundedResult = Math.Round(experimentalResult, 5); // Round to 5 decimal places
Dim experimentalResult As Double = 9.87654321
Dim roundedResult As Double = Math.Round(experimentalResult, 5) ' Round to 5 decimal places
Al aplicar modelos matemáticos o simulaciones, el redondeo puede ser necesario para simplificar cálculos complejos. El método Math.Round puede aplicarse para controlar la precisión de los resultados intermedios en el proceso de modelado.
double modelResult = SimulatePhysicalSystem(parameters);
double roundedModelResult = Math.Round(modelResult, 3); // Round to 3 decimal places
double modelResult = SimulatePhysicalSystem(parameters);
double roundedModelResult = Math.Round(modelResult, 3); // Round to 3 decimal places
Dim modelResult As Double = SimulatePhysicalSystem(parameters)
Dim roundedModelResult As Double = Math.Round(modelResult, 3) ' Round to 3 decimal places
En el desarrollo de juegos, la precisión numérica es crucial para los cálculos de física, posicionamiento y otras operaciones matemáticas. El método Math.Round puede utilizarse para garantizar que los valores relacionados con el juego se redondean a un nivel de precisión adecuado.
double playerPosition = CalculatePlayerPosition();
double roundedPosition = Math.Round(playerPosition, 2); // Round to 2 decimal places
double playerPosition = CalculatePlayerPosition();
double roundedPosition = Math.Round(playerPosition, 2); // Round to 2 decimal places
Dim playerPosition As Double = CalculatePlayerPosition()
Dim roundedPosition As Double = Math.Round(playerPosition, 2) ' Round to 2 decimal places
En cada uno de estos escenarios, el método Math.Round permite a los desarrolladores controlar la precisión de los valores numéricos, promoviendo la exactitud y legibilidad en sus aplicaciones.
La principal característica de IronPDF es su HTML a PDF manteniendo los diseños y estilos. Convierte contenidos web en PDF, lo que resulta ideal para informes, facturas y documentación. Puede convertir fácilmente archivos HTML, URL y cadenas HTML en PDF.
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}
Imports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim renderer = New ChromePdfRenderer()
' 1. Convert HTML String to PDF
Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")
' 2. Convert HTML File to PDF
Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")
' 3. Convert URL to PDF
Dim url = "http://ironpdf.com" ' Specify the URL
Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
pdfFromUrl.SaveAs("URLToPDF.pdf")
End Sub
End Class
Veamos ahora cómo podemos generar documentos PDF utilizando IronPDF Biblioteca PDF en C# de **Software de hierro.
Tiene la opción de instalar IronPDF a través de la consola del gestor de paquetes NuGet o del gestor de paquetes de Visual Studio.
dotnet add package IronPdf
dotnet add package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'dotnet add package IronPdf
Instale IronPDF utilizando NuGet Package Manager buscando "ironpdf" en la barra de búsqueda.
Console.WriteLine("Params Example");
List<string> cart = new List<string>();
void AddItems(params string [] items)
{
for (int i = 0; i < items.Length; i++)
{
cart.Add(items [i]);
}
}
Console.WriteLine("Enter the cart items as comma separated ");
var itemsString = Console.ReadLine();
if (itemsString != null)
{
var items = itemsString.Split(",").ToArray();
AddItems(items);
}
AddItems("Sample1", "Sample2");
Console.WriteLine("-------------------------------------------------------");
Console.WriteLine("Display Cart");
string name = "Sam";
var count = cart.Count;
string content = $@"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} items in the cart.</p>
" +
string.Join("\n", cart.Select(x => $"<p>{x}</p>"))
+ @"
</body>
</html>";
// Create a new PDF document
var pdfDocument = new ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf(content).SaveAs("cart.pdf");
Console.WriteLine("Params Example");
List<string> cart = new List<string>();
void AddItems(params string [] items)
{
for (int i = 0; i < items.Length; i++)
{
cart.Add(items [i]);
}
}
Console.WriteLine("Enter the cart items as comma separated ");
var itemsString = Console.ReadLine();
if (itemsString != null)
{
var items = itemsString.Split(",").ToArray();
AddItems(items);
}
AddItems("Sample1", "Sample2");
Console.WriteLine("-------------------------------------------------------");
Console.WriteLine("Display Cart");
string name = "Sam";
var count = cart.Count;
string content = $@"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} items in the cart.</p>
" +
string.Join("\n", cart.Select(x => $"<p>{x}</p>"))
+ @"
</body>
</html>";
// Create a new PDF document
var pdfDocument = new ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf(content).SaveAs("cart.pdf");
Imports Microsoft.VisualBasic
Console.WriteLine("Params Example")
Dim cart As New List(Of String)()
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'void AddItems(params string [] items)
'{
' for (int i = 0; i < items.Length; i++)
' {
' cart.Add(items [i]);
' }
'}
Console.WriteLine("Enter the cart items as comma separated ")
Dim itemsString = Console.ReadLine()
If itemsString IsNot Nothing Then
Dim items = itemsString.Split(",").ToArray()
AddItems(items)
End If
AddItems("Sample1", "Sample2")
Console.WriteLine("-------------------------------------------------------")
Console.WriteLine("Display Cart")
Dim name As String = "Sam"
Dim count = cart.Count
Dim content As String = $"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} items in the cart.</p>
" & String.Join(vbLf, cart.Select(Function(x) $"<p>{x}</p>")) & "
</body>
</html>"
' Create a new PDF document
Dim pdfDocument = New ChromePdfRenderer()
pdfDocument.RenderHtmlAsPdf(content).SaveAs("cart.pdf")
En el código anterior, estamos generando un documento HTML para los artículos del carrito y luego lo guardamos como un documento PDF utilizando IronPDF.
Para habilitar la funcionalidad del código proporcionado, es necesario adquirir una clave de licencia. Puede obtener una clave de prueba en esta dirección aquíy debe insertarse en el archivo appsettings.json.
"IronPdf.LicenseKey": "your license key"
"IronPdf.LicenseKey": "your license key"
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'"IronPdf.LicenseKey": "your license key"
Indique su dirección de correo electrónico para obtener una licencia de prueba.
En conclusión, el método Math.Round en C# es una herramienta versátil para redondear valores dobles y decimales, ofreciendo a los desarrolladores la flexibilidad de redondear al entero más cercano o a un número especificado de decimales. Comprender los entresijos de Math.Round, incluido su tratamiento de los valores de punto medio y el uso de estrategias MidpointRounding, es esencial para realizar operaciones matemáticas precisas y fiables en la programación en C#. Ya se trate de cálculos financieros, pantallas de interfaz de usuario u otros escenarios que requieran una representación numérica precisa, el método Math.Round resulta ser un activo indispensable en la caja de herramientas de un programador. Además, vimos cómo IronPDF es una biblioteca versátil para generar documentos PDF.
9 productos API .NET para sus documentos de oficina