一、問題描述
開發中,需要使Decimal類型數據保留小數點后的兩位小數且不需要進行四舍五入操作,即直接截取小數點后面的兩位小數即可。例如:1.245M --> 1.24,而不是1.25
使用Decimal.Round()方法可以實現保留Decimal類型數據小數點后的若干位小數,但是該方法會進行四舍五入操作,而不是直接截取。所以,該方法不可取,在網上搜尋一番也沒有找到合適的方法,便自己實現了一個截取Decimal類型數據小數點后若干位的方法。
二、詳細的實現代碼
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)); }}
測試代碼中,不僅給出了本文實現方法的測試代碼,還給出了Decimal.Round()方法的測試代碼,最終的運行效果如下圖所示。
圖1 運行結果
大伙兒,能看出區別吧?
新聞熱點
疑難解答