C#中Decimal類型截取保留N位小數并且不進行四舍五入操作
更新時間:2015年06月17日 09:59:53 投稿:junjie
這篇文章主要介紹了C#中Decimal類型截取保留N位小數并且不進行四舍五入操作,本文給出需求說明和實現(xiàn)代碼,需要的朋友可以參考下
一、問題描述
開發(fā)中,需要使Decimal類型數據保留小數點后的兩位小數且不需要進行四舍五入操作,即直接截取小數點后面的兩位小數即可。例如:1.245M --> 1.24,而不是1.25
使用Decimal.Round()方法可以實現(xiàn)保留Decimal類型數據小數點后的若干位小數,但是該方法會進行四舍五入操作,而不是直接截取。所以,該方法不可取,在網上搜尋一番也沒有找到合適的方法,便自己實現(xiàn)了一個截取Decimal類型數據小數點后若干位的方法。
二、詳細的實現(xiàn)代碼
using System;
namespace CutDecimal
{
public static class DecimalHelper
{
public static decimal CutDecimalWithN(decimal d, int n)
{
string strDecimal = d.ToString();
int index = strDecimal.IndexOf(".");
if (index == -1 || strDecimal.Length < index + n + 1)
{
strDecimal = string.Format("{0:F" + n + "}", d);
}
else
{
int length = index;
if(n != 0)
{
length = index + n + 1;
}
strDecimal = strDecimal.Substring(0, length);
}
return Decimal.Parse(strDecimal);
}
}
}
三、測試代碼及結果
static void Main(string[] args)
{
decimal d = 1.23456789M;
for (int i = 0; i <= 10; i++)
{
Console.WriteLine("{0}", DecimalHelper.CutDecimalWithN(d, i));
}
for (int i = 0; i <= 10; i++)
{
Console.WriteLine("{0}", Decimal.Round(d, i));
}
}
測試代碼中,不僅給出了本文實現(xiàn)方法的測試代碼,還給出了Decimal.Round()方法的測試代碼,最終的運行效果如下圖所示。

圖1 運行結果
大伙兒,能看出區(qū)別吧?

