在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
在 C# 程式設計領域,Math.Round 值方法在四捨五入數值方面扮演著關鍵角色,特別是在處理 double 值和 decimal 值數據類型時。此方法允許開發人員將給定的數值四捨五入為最接近的整數值或指定數目的較少小數位,為數學運算提供了靈活性和精確度。有多種類型的四捨五入方式可用,例如 Midpoint Rounding。在本文中,我們將深入探討 C# 中 Math.Round 的奧秘,探討其各種方面及使用場景。在本文的後續部分,我們將探索如何利用 IronPDF 程式庫由 Iron Software 處理PDF檔案。
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)
*/
' 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
Dim originalValue As Double = 3.75
Dim roundedValue As Double = 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
Dim originalValue As Decimal = 8.625D
Dim roundedValue As Decimal = Math.Round(originalValue, 2)
' Output: 8.63
在這裡,使用Math.Round方法將小數8.625四捨五入到小數點後兩位,得到的結果是8.63。
Math.Round 的主要目的是將給定的數值四捨五入到最接近的整數。如果小數部分正好位於兩個整數之間,該方法會遵循指定的四捨五入操作約定。可以在 Math.Round 方法中使用 MidpointRounding 枚舉作為參數,以確定是向最接近的偶數還是奇數四捨五入。
多種四捨五入操作類型是可能的,如上圖所示。名稱本身是不言自明的。
讓我們來探討如何使用 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
在此範例中,當將值四捨五入到 5.5 時,MidpointRounding.ToEven 會朝向最接近的偶數進行四捨五入。 (導致6),則 MidpointRounding.AwayFromZero 則是向零遠處取整,得到 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
Dim originalValue As Decimal = 9.123456D
Dim roundedValue As Decimal = Math.Round(originalValue, 3) ' round values
' Output: 9.123
這裡,小數 9.123456 被四捨五入到小數點后三位,結果是 9.123。
當結果中次低有效位數之後的數值恰好位於兩個數字之間時,就會出現中點值。例如,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 枚舉成員表示。
Rounding to Nearest Even (銀行家四捨五入): 中點值會四捨五入到最接近的偶數。例如,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);
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)
當一個數字介於另外兩個數字之間的中間時,AwayFromZero 四捨五入策略會將其四捨五入到最接近的數字。
此策略的特點是朝零方向進行舍入。其結果是最接近且不大於無限精確結果的數值。
此策略涉及四捨五入到最接近的數字,當一個數字正好介於兩個數字之間時,將其四捨五入到最接近的偶數。
此策略包括向下舍入,結果為最接近且不超過無限精確的結果。
此策略涉及向上舍入,結果是最接近且不小於無限精確結果的值。
在使用雙精度浮點數時,由於浮點數表示的性質,理解潛在的不精確性是至關重要的。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
Dim originalValue As Double = 123.456789
Dim result As Double = Math.Round(originalValue, 4)
' Output: 123.4568, rounded value
在這個例子中,將 double 值 123.456789 四捨五入到小數點後四位,得到更精確的值 123.4568。
當小數值正好位於兩個整數的中間時,中點取捨策略變得至關重要。Math.Round 方法使用指定的 MidpointRounding 策略來解決這種情況。
請參考以下使用中點捨入的示例:
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
在這裡,值 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
Dim interestRate As Double = 0.04567
Dim roundedInterest As Double = 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
Dim temperature As Double = 23.678
Dim roundedTemperature As Double = 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
Dim meanValue As Double = CalculateMean(data)
Dim roundedMean As Double = 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
Dim experimentalResult As Double = 9.87654321
Dim roundedResult As Double = 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
Dim modelResult As Double = SimulatePhysicalSystem(parameters)
Dim roundedModelResult As Double = 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
Dim playerPosition As Double = CalculatePlayerPosition()
Dim roundedPosition As Double = Math.Round(playerPosition, 2) ' Round to 2 decimal places
在每個這些情景中,Math.Round 方法使開發人員能夠控制數值的精確度,提升應用程式的準確性和可讀性。
IronPDF 的核心功能是其 HTML轉PDF 函數,保持佈局和樣式。它將網頁內容轉換為 PDF,這對於報告、發票和文檔非常有用。您可以輕鬆地將 HTML 檔案、網址和 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");
}
}
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
現在讓我們看看如何使用 IronPDF 生成 PDF 文件 IronPDF C# PDF 庫 來自 Iron Software.
您可以選擇通過 NuGet 套件管理員控制台或 Visual Studio 套件管理員來安裝 IronPDF。
dotnet add package IronPdf
dotnet add package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'dotnet add package IronPdf
使用 NuGet 套件管理員安裝 IronPDF,請在搜尋欄中搜尋 "ironpdf"。
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")
在上面的程式碼中,我們正在生成購物車項目的HTML文件,然後使用IronPDF將其保存為PDF文件。
要啟用所提供程式碼的功能,必須取得授權金鑰。您可以從這裡獲取試用金鑰 這裡,必須插入到 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"
請提供您的電子郵件地址以獲取試用許可証。
總而言之,C# 中的 Math.Round 方法是一個多用途工具,用於四捨五入 double 和 decimal 值,為開發者提供了四捨五入至最近整數或指定小數位數的靈活性。理解 Math.Round 的複雜性,包括其對中點值的處理以及 MidpointRounding 策略的使用,對於在 C# 程式設計中進行準確且可靠的數學操作至關重要。無論是處理財務計算、用戶界面顯示,還是其他需要精確數字表示的場景,Math.Round 方法都證明是程式設計師工具箱中不可或缺的資產。此外,我們還看到 IronPDF 是一個多用途的函式庫,可以生成 PDF 文件。