.NET 帮助

Math.Round C# (它是如何为开发人员工作的)

Chipego
奇佩戈-卡琳达
2024年三月6日
分享:

在C#编程领域,Math.Round值方法在对数值进行四舍五入时起着关键作用,尤其是在处理double值和decimal值数据类型时。此方法允许开发人员将给定的数值四舍五入到最接近的整数值或指定的小数位数,为数学运算提供灵活性和精确度。 有几种舍入类型可用,例如中点舍入。 在本文中,我们将深入探讨 C# 中 Math.Round 的复杂性,探索其各个方面及使用场景。 在本文的后续部分中,我们将探讨该IronPDF图书馆铁软件用于处理 PDF 文件。

C&num 中的 Math.Round 基础知识;

Math.Round 方法

在C#中,Math.Round方法是一个功能强大的工具,可以使用指定的舍入方式对小数位进行舍入。 它是System命名空间的一部分,并提供多种重载以适应不同的舍入操作。

/* 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)
*/

四舍五入双精度值

处理双精度值时,Math.Round 通常用于将数字四舍五入到最接近的整数。 例如:

double originalValue = 3.75;
double roundedValue = Math.Round(originalValue);
// Output: 4
double originalValue = 3.75;
double roundedValue = Math.Round(originalValue);
// Output: 4

在本例中,Math.Round 方法将原始的 double 值 3.75 四舍五入为最接近的整数值,即 4。

四舍五入小数值

同样,Math.Round 方法适用于十进制值。 考虑以下示例:

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

这里使用 Math.Round 方法将小数 8.625 四舍五入到小数点后两位,得到四舍五入后的数值 8.63。

最近整数值

Math.Round的主要目的是将给定的数值四舍五入为最接近的整数。 如果小数部分正好介于两个整数之间,该方法遵循规定的四舍五入操作约定。 MidpointRounding枚举可以用作Math.Round方法中的参数,决定是向最近的偶数还是奇数进行四舍五入。

如上图所示,可以进行几种类型的舍入操作。 名字本身就是不言自明的。

指定的舍入惯例

让我们探索如何使用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

在本例中,将数值舍入到 5.5 时,MidpointRounding.ToEven 向最接近的偶数舍入(导致 6)而 MidpointRounding.AwayFromZero 则从 0 开始舍入,得到 5。

舍入到指定的小数位数

要将数字四舍五入到指定的小数位数,可以使用 Math.Round 方法,并包含一个表示整数位数的附加参数:

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

这里,十进制数 9.123456 四舍五入到小数点后三位,得出四舍五入后的数值 9.123。

C#中的中点值和四舍五入约定

当结果中最低有效位后的值正好位于两个数字之间的一半时,就会出现中点值。 例如,2.56500是一个中点值,当四舍五入到小数点后两位时为2.57,而3.500是一个中点值,当四舍五入到整数时为4。挑战在于在四舍五入到最接近值的策略中识别没有明确舍入规则的中点值的最接近值。

C# 中的 Round 方法支持两种用于处理中间值的舍入约定:

远离零的舍入:中点值会被舍入到离零更远的下一个数字。 例如,3.75被四舍五入为3.8,3.85被四舍五入为3.9,-3.75被四舍五入为-3.8,-3.85被四舍五入为-3.9。此方法由MidpointRounding.AwayFromZero枚举成员表示。

四舍六入五成双(银行家四舍五入): 中点值被四舍五入到最接近的偶数。 实例包括3.75和3.85四舍五入到3.8,以及-3.75和-3.85四舍五入到-3.8。这种舍入方法由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);

输出

Math.Round C#(如何为开发人员工作):图 1 - 双精度浮点输出

中点舍入模式

Math.Round C#(开发人员如何使用):图 2 - 中点舍入

AwayFromZero: 1

AwayFromZero 四舍五入策略是在一个数字位于两个其他数字之间的中间位置时,向最接近的数字舍入。

ToZero:2

该策略的特点是向零方向舍入。 结果是最接近且不大于无限精确结果的数值。

ToEven: 0

该策略涉及四舍五入到最接近的数字,当一个数字位于两个其他数字的中间时,它将被四舍五入到最接近的偶数。

ToNegativeInfinity: 3

该策略涉及向下舍入,使结果尽可能接近并且不大于无限精确的结果。

正无穷: 4

此策略涉及向上舍入,结果将是最接近且不低于无限精确结果。

精度和双精度浮点运算

精确度和双精度值

在处理双精度浮点数时,了解由于浮点表示的性质而可能产生的不精确性是至关重要的。 Math.Round 方法通过将值舍入到最接近的整数或指定的小数位数来帮助缓解精度问题。

使用 Math.Round 指定精度

开发人员可以利用 Math.Round 方法在计算中实现所需的精度:

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

在本例中,双数值 123.456789 四舍五入到小数点后四位,得到更精确的数值 123.4568。

中点四舍五入策略

处理中点值

当小数值恰好位于两个整数之间时,舍入策略变得至关重要。 Math.Round 方法使用指定的 MidpointRounding 策略来解决此类情况。

Midpoint Rounding 示例

请考虑以下使用中点舍入的示例:

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

在这里,数值 7.5 从零四舍五入,得到四舍五入后的数值 8。

实际应用场景

以下是其在不同背景中的一些应用示例:

财务计算

在金融应用中,精确的舍入至关重要。 例如,在计算利率、货币兑换或处理税务计算时,可以使用Math.Round方法确保结果被四舍五入到适当的小数位数,以符合财务标准。

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

用户界面显示

在用户界面中呈现数值时,通常会对数字进行四舍五入以提高可读性。 例如,在显示温度读数或财务数据的仪表盘中,使用 Math.Round 进行四舍五入可以增强所呈现信息的清晰度。

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

统计分析

在统计分析中,精确的舍入对于避免引入偏差或不准确性至关重要。 无论是计算平均值、中位数,还是其他统计指标,Math.Round 方法都可以帮助以所需的精确度呈现结果。

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

科学计算

在科学应用中,精确度至关重要。 在处理实验数据或科学计算时,使用 Math.Round 进行四舍五入可以确保结果以有意义和准确的方式呈现。

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

数学建模

在实现数学模型或模拟时,舍入可能是简化复杂计算所必需的。 Math.Round 方法可用于控制建模过程中中间结果的精度。

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

游戏开发

在游戏开发中,数值精度对于物理计算、定位和其他数学运算至关重要。 Math.Round 方法可用于确保与游戏相关的值四舍五入到适当的精确度。

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

在上述每种情况下,Math.Round 方法都允许开发人员控制数值的精度,从而提高应用程序的准确性和可读性。

介绍IronPDF

IronPDF 的核心功能是其HTML 转 PDF函数,保持布局和样式。 它将网络内容转换为PDF,非常适合报告、发票和文档。 您可以轻松地将 HTML 文件、URL 和 HTML 字符串转换为 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");
    }
}

现在让我们看看如何使用以下工具生成 PDF 文档IronPDFC# PDF 库来自铁软件.

安装

您可以选择通过 NuGet 包管理器控制台或 Visual Studio 包管理器安装 IronPDF。

dotnet add package IronPdf
dotnet add package IronPdf

在搜索栏中搜索 "ironpdf",使用 NuGet 包管理器安装 IronPDF。

使用 IronPDF 生成 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");
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");

在上述代码中,我们为购物车项目生成 HTML 文档,然后使用 IronPDF 将其保存为 PDF 文档。

输出

Math.Round C#(开发人员如何使用):图 3 - 上述代码的输出结果

许可(可免费试用)

要启用所提供代码的功能,必须获取许可证密钥。 您可以从此位置获取试用密钥*这里***必须插入到 appsettings.json 文件中。

"IronPdf.LicenseKey": "your license key"
"IronPdf.LicenseKey": "your license key"

提供您的电子邮件 ID,即可获得试用版许可证。

结论

总之,C#中的Math.Round方法是一个用于舍入double和decimal值的多功能工具,为开发人员提供了将数值舍入到最近的整数或指定小数位数的灵活性。 了解Math.Round的复杂性,包括对中点值的处理以及使用MidpointRounding策略,对于在C#编程中进行准确可靠的数学操作至关重要。 无论是在处理财务计算、用户界面显示,还是其他需要精确数值表示的场景中,Math.Round 方法都被证明是程序员工具包中不可或缺的资产。 此外,我们还看到IronPDF是一个用于生成PDF文档的多功能库。

Chipego
软件工程师
Chipego 拥有出色的倾听技巧,这帮助他理解客户问题并提供智能解决方案。他在 2023 年加入 Iron Software 团队,此前他获得了信息技术学士学位。IronPDF 和 IronOCR 是 Chipego 主要专注的两个产品,但他对所有产品的了解每天都在增长,因为他不断找到支持客户的新方法。他喜欢 Iron Software 的合作氛围,公司各地的团队成员贡献他们丰富的经验,以提供有效的创新解决方案。当 Chipego 离开办公桌时,你经常可以发现他在看书或踢足球。
< 前一页
C# 计时器(其对开发者的运作方式)
下一步 >
C# ArrayList(开发者如何使用)