DecimalHelper

DecimalHelper

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MyApp.Utility
{
	/// <summary>
	/// decimalヘルパークラス
	/// </summary>
	public class DecimalHelper
	{
		#region メソッド

        #region 数値のN捨N+1入を行います:Round
        /// <summary>
		/// 数値のN捨N+1入を行います
		/// </summary>
		/// <param name="data">まるめ対象データ</param>
		/// <param name="decimalFigure">まるめ対象小数桁</param>
		/// <param name="roundNumber">まるめ対象数値(0〜8)</param>
		/// <returns>まるめ処理実施後の数値</returns>
		public static decimal Round(decimal data, Int32 decimalFigure, Int32 roundNumber) 
		{
			//パラメータチェック
			if ((roundNumber < 0) || (roundNumber > 8))
			{
				throw new ArgumentException("param:[roundNumber]が対象外の値");
			}

			//数値のN捨N+1入処理
			decimal calcResult = 0;
			decimal calcDigit = (decimal)System.Math.Pow(10, (double)decimalFigure);
			decimal calcTmp = (decimal)1 - ((decimal)(roundNumber + 1) / 10);

			if (data > 0)
			{
				calcResult = Math.Floor((data * calcDigit) + calcTmp) / calcDigit;
			}
			else
			{
				calcResult = Math.Ceiling((data * calcDigit) - calcTmp) / calcDigit;
			}

			//まるめ処理実施後の数値を返す
			return calcResult;
		}
		#endregion

		#region 数値を指定の第N位で切り捨てる:Cut
		/// <summary>
		/// 数値を指定の第N位で切り捨てる
		/// </summary>
		/// <param name="data">切り捨て対象データ</param>
		/// <param name="decimalFigure">切捨て対象小数桁</param>
		/// <returns>切り捨て処理実施後の数値</returns>
		public static decimal Floor(decimal data, Int32 decimalFigure)
		{
			//数値を指定の第N位で切り捨て処理
			decimal calcResult = 0;
			decimal calcDigit = (decimal)System.Math.Pow(10, (double)decimalFigure);

			if (data > 0)
			{
				calcResult = Math.Floor(data * calcDigit) / calcDigit;
			}
			else
			{
				calcResult = Math.Ceiling(data * calcDigit) / calcDigit;
			}

			//切り捨て処理実施後の数値を返す
			return calcResult;

		}
		#endregion

		#endregion
	}
}