フッターコンテンツにスキップ
.NETヘルプ

C# Round (開発者向けの仕組み)

数値を丸めることは基本的な数学の概念であり、しばしば実世界のシナリオで適用されます。 C#では、Math.Roundメソッドがこれを容易にし、値を最も近い整数値または特定の小数点以下の桁数に丸めることができます。 このチュートリアルでは、C# における四捨五入の微妙な点を掘り下げ、この強力なメソッドをいかに活用できるかを説明します。

丸めへのイントロダクション

数値を丸めるということは、シンプルにするためや特定の要件に従うために最も近い整数または小数点以下の値に調整することを意味します。 たとえば、小数点以下の数値3.14159を二桁で丸めると3.14になります。

なぜ数字を丸めるのですか?

  1. シンプルさ: 丸められた数はしばしば読みやすく、理解しやすいです。
  2. 精度: 通貨計算のようなコンテキストでは、正確なものよりも丸められた値を操作する方が効率的な場合があります。

よくある丸めシナリオ

  1. 最も近い整数: 小数を最も近い全体の数に丸める。
  2. 指定された小数点以下桁数: 特定の小数点以下桁数に数値を丸める。例えば、15.678を二桁で丸めると15.68になります。

C#における丸めの基本

C#はMath.Roundメソッドを通じて強力な丸めシステムを提供しています。 このメソッドは、丸め操作をカスタマイズするために様々な引数とパラメータを受け付けることができます。

最も近い整数値への丸め

Math.Roundメソッドの最もシンプルな形式は、ダブル値を最も近い整数値に丸めます。 与えられた数値が二つの整数から等距離の場合、それはしばしば「銀行家の丸め」と呼ばれる最も近い偶数に丸めます。

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

上記の例では、4.545から等距離です。 4が最も近い偶数なので、メソッドは4を返します。

特定の小数点以下桁数への丸め

追加の引数を使用して、ダブル精度の浮動小数点を指定された小数点以下桁数に丸めることもできます。

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

このメソッドは元の値7.345677.35に丸めます。二桁で丸めるよう指定したためです。

中点丸めモード

中点値(二つの潜在的に丸められる値から等距離のもの)を扱う場合、C#は中点がどのように丸められるかを決定する中点丸めMidpointRoundingモードを提供します。

デフォルトの丸め

デフォルトでは、Math.Roundは中間値を最も近い偶数に丸めます。

double valueOne = Math.Round(4.5);  // Rounded to 4
double valueTwo = Math.Round(5.5);  // Rounded to 6
double valueOne = Math.Round(4.5);  // Rounded to 4
double valueTwo = Math.Round(5.5);  // Rounded to 6
Dim valueOne As Double = Math.Round(4.5) ' Rounded to 4
Dim valueTwo As Double = Math.Round(5.5) ' Rounded to 6
$vbLabelText   $csharpLabel

中点丸めMidpointRoundingモードの指定

中点値の丸め操作に対するさらなる制御を提供するために、特定の中点丸めMidpointRoundingモードをパラメータとして渡すことができます。

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

この例では、MidpointRounding.AwayFromZeroモードが数値を6に丸めることを保証します。

小数値でのMath.Roundの使用

ダブル値の丸めについて説明しましたが、C#は小数値の丸めもサポートしています。 これらのメソッドは類似しており、しかし小数データ型と共に機能します。 以下は例です:

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

小数点以下一桁で丸めると、5.6785.7になります。

カスタム丸め関数

標準のMath.Roundメソッドではカバーされていない特定の丸め操作を行う必要がある場合があります。 カスタム丸め関数を書くことで、プロセスに完全な制御を持つことができます。

切り上げ

常に最も近い整数に切り上げるには、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

小数4.35に切り上げられます。

切り捨て

逆に、最も近い整数値に切り捨てるには、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

小数4.74に切り捨てられます。

文字列入力の処理

多くのアプリケーションにおいて、数値を文字列として扱うことがあります。 文字列をダブルまたは小数にパースし、丸め、そして再びC#で変換することができます。

解析と丸め

小数を含む文字列を丸める例を次に示します:

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

元の値:4.5678, 丸めた値:4.57

金融アプリケーションでの丸め

金融アプリケーションを扱う際には精度が重要です。 丸めの誤差は重大な問題を引き起こす可能性があります。 このような場合、doubleよりも高精度なdecimal型が好まれます。

貨幣の丸めの例

以下に示す例は、通貨を表す小数値の丸めを示しています:

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

上記のコードは、ほとんどの通貨標準に従って値を二桁で丸めます。

丸めエラーのデバッグとトラブルシューティング

時には、丸め操作が期待通りの結果をもたらさないことがあります。 これらの不整合は、double値の浮動小数点精度のような問題が原因である可能性があります。

よくある落とし穴

  • Double精度: double型は必ずしも小数数を正確に表現するわけではなく、予期しない丸め結果を引き起こす可能性があります。 この問題を軽減するためにはdecimal型を使用できます。
  • 不適切な中点丸めモード: 特定の要件に対して適切なMidpointRoundingモードを使用することを確認してください。 これらのモードを誤用すると丸めエラーを引き起こす可能性があります。

どうデバッグするか

ログとブレークポイントのようなツールを利用して、丸めの前後の値を追跡します。 丸めメソッドに渡したオリジナルの値とパラメータを調査することは通常、不整合を明らかにできます。

Iron Suite

C#の丸めの基本をマスターした後、特に複雑なデータフォーマットを扱うときにアプリケーションを次のレベルにどのように引き上げるか疑問を持つかもしれません。 Iron Suiteがここであなたの救世主になることができます。 このスイートには、IronPDF、IronXL、IronOCR、およびIronBarcodeのような強力なツールが含まれています。 これらのツールがどのようにあなたの丸め操作と統合し、アプリケーションをさらに充実させるかを詳しく見ていきましょう。

IronPDF

C#の丸め(開発者向けに機能する方法)図1

IronPDFは、HTMLからのPDF生成、編集、管理を目的としたC#で開発された強力なライブラリです。 丸め操作を行った後にPDF形式でレポートを生成する必要があるシナリオを想像してください。 IronPDFはC#のコードを高品質のPDFに簡単に変換することができます。

using IronPdf;
using System;

class Program
{
    static void Main(string[] args)
    {
        // Sample data for invoice
        decimal itemPrice = 49.995m; // Item price before rounding
        decimal taxRate = 0.18m;     // 18% tax rate

        // Round price to 2 decimal places
        decimal roundedPrice = Math.Round(itemPrice, 2);

        // Calculate and round the tax amount
        decimal taxAmount = Math.Round(roundedPrice * taxRate, 2);

        // Calculate the total amount
        decimal totalAmount = Math.Round(roundedPrice + taxAmount, 2);

        // Create simple HTML content for the PDF
        string htmlContent = $@"
            <h1>Invoice</h1>
            <p>Item Price: ${roundedPrice}</p>
            <p>Tax (18%): ${taxAmount}</p>
            <hr>
            <h2>Total Amount: ${totalAmount}</h2>
        ";

        // Generate PDF using IronPDF
        var renderer = new ChromePdfRenderer();
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF file
        pdfDocument.SaveAs("Invoice.pdf");

        Console.WriteLine("PDF invoice generated successfully with rounded values.");
    }
}
using IronPdf;
using System;

class Program
{
    static void Main(string[] args)
    {
        // Sample data for invoice
        decimal itemPrice = 49.995m; // Item price before rounding
        decimal taxRate = 0.18m;     // 18% tax rate

        // Round price to 2 decimal places
        decimal roundedPrice = Math.Round(itemPrice, 2);

        // Calculate and round the tax amount
        decimal taxAmount = Math.Round(roundedPrice * taxRate, 2);

        // Calculate the total amount
        decimal totalAmount = Math.Round(roundedPrice + taxAmount, 2);

        // Create simple HTML content for the PDF
        string htmlContent = $@"
            <h1>Invoice</h1>
            <p>Item Price: ${roundedPrice}</p>
            <p>Tax (18%): ${taxAmount}</p>
            <hr>
            <h2>Total Amount: ${totalAmount}</h2>
        ";

        // Generate PDF using IronPDF
        var renderer = new ChromePdfRenderer();
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF file
        pdfDocument.SaveAs("Invoice.pdf");

        Console.WriteLine("PDF invoice generated successfully with rounded values.");
    }
}
Imports IronPdf
Imports System

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Sample data for invoice
		Dim itemPrice As Decimal = 49.995D ' Item price before rounding
		Dim taxRate As Decimal = 0.18D ' 18% tax rate

		' Round price to 2 decimal places
		Dim roundedPrice As Decimal = Math.Round(itemPrice, 2)

		' Calculate and round the tax amount
		Dim taxAmount As Decimal = Math.Round(roundedPrice * taxRate, 2)

		' Calculate the total amount
		Dim totalAmount As Decimal = Math.Round(roundedPrice + taxAmount, 2)

		' Create simple HTML content for the PDF
		Dim htmlContent As String = $"
            <h1>Invoice</h1>
            <p>Item Price: ${roundedPrice}</p>
            <p>Tax (18%): ${taxAmount}</p>
            <hr>
            <h2>Total Amount: ${totalAmount}</h2>
        "

		' Generate PDF using IronPDF
		Dim renderer = New ChromePdfRenderer()
		Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent)

		' Save the PDF file
		pdfDocument.SaveAs("Invoice.pdf")

		Console.WriteLine("PDF invoice generated successfully with rounded values.")
	End Sub
End Class
$vbLabelText   $csharpLabel

IronXL

C#の丸め(開発者向けに機能する方法)図2

IronXLは、C#開発者がExcelファイルをシームレスに読み書きし、操作するための機能を提供します。 IronXLでは、Excelシートから小数またはダブルデータを取得し、C#で丸め操作を行うことができます。

IronOCR

C#の丸め(開発者向けに機能する方法)図3

IronOCRは、画像やPDFからテキストを認識して抽出する先進的なC#用光学文字認識(OCR)ライブラリです。 数値データを含むスキャンされた文書や画像を持っていると仮定します。 IronOCRを使用すると、このデータを抽出し、C#で処理したり丸めたりすることができます。

IronBarcode

C#の丸め(開発者向けに機能する方法)図4

IronBarcodeは、.NETでのバーコードとQRコードの生成、読み取り、分類のための強力なツールです。 丸められたデータをバーコードにエンコードする必要がある文脈(たとえば、リテールアプリケーションでの製品価格設定)において、IronBarcodeは非常に貴重です。

結論

C#での丸めは様々な分野で応用される多面的なトピックです。 Math.RoundMath.FloorMath.Ceilingのような組み込みメソッドを理解し、適切なデータ型(doubleまたはdecimal)を使用するタイミングを知ることは数値データを効率的に扱う能力を高めます。

C#での丸めを使用すると、データをより扱いやすくするのに役立ちます。 でも、その数値でさらに何かをしたい場合はどうしますか? それが<Iron Suiteの出番です。 それはPDF、Excelファイル、画像内のテキスト、およびバーコードで作業するのを助けるツールのセットです。

ここでのエキサイティングな部分:これらのツールを試用ライセンスで無料で試すことができます。気に入れば購入を検討できます。 1つ購入することを決めた場合、各ツールはliteLicenseの価格です。 すべてを購入したい場合でも、2つだけ購入して全部セットを手に入れることができます。 それは、4つのツールを取得しつつ、2つだけの支払いをするようなものです! Iron Suiteのライセンスページでさらに多くの情報を確認できます。

よくある質問

C#で金融アプリケーションのために数値を丸めるにはどうすればよいですか?

C#では、金融アプリケーションでの高精度を確保するために`decimal`データ型とともに`Math.Round`メソッドを使用できます。金融取引の正確な丸めを保証するために`MidpointRounding.AwayFromZero`の使用を推奨します。

C#のデフォルトの丸めモードは何ですか?

C#のデフォルトの丸めモードは「バンカーズラウンド」で、`MidpointRounding.ToEven`オプションを使用して中間値を最も近い偶数に丸めます。

HTMLをPDFに変換するときに、C#で丸めはどのように機能しますか?

IronPDFを使用してHTMLをPDFに変換する際、数値データに対して丸め操作を組み込むことができ、C#でデータを処理してからPDF文書にレンダリングします。

C#のデータに対して丸めメソッドを使用できますか?

はい、IronXLを使用すればC#でExcelファイルを操作し、セル内の数値データに対して`Math.Round`を使用して正確なデータ表示を行うことができます。

C#におけるMidpointRounding列挙体の重要性は何ですか?

`MidpointRounding`列挙体は、`AwayFromZero`や`ToEven`など中間値を丸めるオプションを提供し、開発者が整数の間に正確に位置する数値に対してどのように丸めを適用するかを制御できます。

C#でカスタム丸め関数を適用するにはどうすればよいですか?

C#での標準の`Math.Round`メソッドを超えた特別な丸め規則を扱うために独自のロジックを記述してカスタム丸め関数を作成できます。この関数はIron Softwareツールと統合され、データ処理が強化されます。

C#で文字列の入力値を丸めることができますか?

はい、C#では文字列の入力を`double`や`decimal`のような数値型に解析し、丸めメソッドを適用してからさらに使用するために再び文字列に変換できます。

IronOCRやIronBarcodeのようなツールは丸め操作からどのように恩恵を受けられますか?

IronOCRはテキスト認識から抽出された数値データを処理するために丸めを使用でき、IronBarcodeは数値情報の正確なエンコーディングのために丸めた値をバーコードデータに統合できます。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。