1. 程式人生 > >使Decimal型別資料保留N位小數且不進行四捨五入操作(C#)

使Decimal型別資料保留N位小數且不進行四捨五入操作(C#)

一 問題描述

開發中,需要使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 執行結果

大夥兒,能看出區別吧?

相關推薦

使Decimal型別資料保留N小數進行四捨五入操作C#

一 問題描述 開發中,需要使Decimal型別資料保留小數點後的兩位小數且不需要進行四捨五入操作,即直接擷取小數點後面的兩位小數即可。例如:1.245M --> 1.24,而不是1.25 使用D

javascript 保留小數 (四捨五入)

保留兩位小數且不四捨五入:方法一:    var a = 2.461;    var b = ( parseInt( a * 100 ) / 100 ).toFixed(2);    console.log(b);      // 2.46方法二:    var a = -1

decimal 保留n小數

decimal 保留2位小數2008-05-07 10:52Decimal a=10; DeciMal b=3; Decimal c=a/b; 得出 3.3333333333333333333333333 而這裡我只想得出3.33 我只能用Convert.ToDecima

double型別資料保留2小數

//使用 DecimalFormat 類(import java.text.DecimalFormat;) double o = (10+11*0.8+14*0.5)/87*100; System.out.println(new DecimalFormat(".##").format(o

頁面中使用fmt:formatNumber標簽保留n小數四舍五入問題

inf 數值 AC ber pattern 小數位 min BE digi 在頁面中 對某一數值進行保留n位小數的操作JSTL的formatNumber 標簽進行數值的四舍五入時,發現它竟然使用的是"4舍6入5奇偶"的算法. 要實現"四舍五入"的算法,只需要在原有值的基礎上

Jquery 保留N小數以上用","號隔開

  s:資料Value n:保留小數位數 function jinEFmoney(s, n) {   if (s == '' || s == null)     return '0.00';   n = n > 0 && n <= 20 ? n : 2;   s =

iOS 怎樣實現最多保留n小數

@implementation NSNumber (TwoDecimal) - (NSString *)twoDecimalString { NSNumberFormatter *formatter = [[NSNumberFormatter allo

JavaScript 保留n小數的toFixed()函式

JavaScript中,要想保留一個小數後的n位小數,通常會用到toFixed()函式來實現,注意:遵守 四捨五入 法則 eg: <script type="text/javascript"&

C#中保留N小數的幾種方法(轉)

1.只要求保留N位不四舍5入   float f = 0.55555f;            int i =(int)(f * 100);           f = (float)(i*1.0)/100;//保留小數後2位 2.保留N位,四捨五入  de

JS-滑鼠移出input,保留小數新增千分分隔符

程式碼如下: 滑鼠移出input後保留兩位小數,新增千分位分隔符<input class="credit" type="text" value="0.00"/> <script type="text/javascript"> //千分位的分隔符 function t

Android double保留小數:擷取 和 四捨五入

方式一: BigDecimal.setScale()方法用於格式化小數點 setScale(2);//表示保留2位小數,預設用四捨五入方式  setScale(2,BigDecimal.ROUND_

Java中四捨五入保留小數保留小數

//四捨五入,不保留小數; float gr = 8;float gc = 3;DecimalFormat df1 = new DecimalFormat("0");//格式化小數,不足的補0 Str

資料結構——二叉樹:基本二叉樹C++

內容概要: 二叉樹相關概念 簡單二叉樹模板類的實現:二叉樹的遍歷、計算高度、計算節點數目 注意事項 一、二叉樹相關概念: 第一部分: 節點(node),根節點(root),左子樹(left subtree),右子樹(right suntree),子節點

ALGO-107演算法訓練 9-7連結串列資料求和操作 c++

  演算法訓練 9-7連結串列資料求和操作   時間限制:1.0s   記憶體限制:512.0MB        讀入10個複數,建立對應連結串列,然後求所有複數的和。 樣例輸入 1 2 1 3 4 5 2

用遞迴方法求n階勒讓德多項式的值C++

#include <iostream> using namespace std; float p(float,float); int main() {float n,x;cin>>n>>x;cout<<p(n,x)<&l

【轉載】SAP的貨幣資料型別保留4小數

怎樣讓SAP的貨幣資料型別保留4位小數SAP資料字典中的貨幣類據型別為CURR,只保留2位小數,而我們在實際開發時,卻經常需要保留4小數。若僅僅是顯示報表倒問題不大,內表中可以使用P型別,隨便自己定義多少位小數點。但筆者的報表需要儲存至資料表中,資料表的資料型別不能使用P型別

資料型別轉換 text 轉 double 再保留小數

round(rp.num/cast(si.value as DECIMAL),2) as price java 後臺資料 double 保留兩位小數: BigDecimal bd = new BigD

設定EntityFramework中decimal型別資料精度問題(EF預設將只會保留到2為精度)

原文:設定EntityFramework中decimal型別資料精度 EF中預設的decimal資料精度為兩位數,當我們資料庫設定的精度大於2時,EF將只會保留到2為精度。 e.g. 2.19990將會被儲存為2.20 1.解決方案一是網上找到常見的方法為重寫DbContext的OnMode

asp.net的decimal保留小數

C#的decimal保留兩位小數 方法一: decimal d = 46.28111; string dStr = Math.Round( d,2 ).ToString(); 結果:dStr = 46.28

ACMNO.16用迭代法求 。求平方根的迭代公式為: X[n+1]=1/2(X[n]+a/X[n]) 要求前後兩次求出的得差的絕對值少於0.00001。 輸出保留3小數 輸入 X 輸出 X的

題目描述 用迭代法求 。 求平方根的迭代公式為: X[n+1]=1/2(X[n]+a/X[n]) 要求前後兩次求出的得差的絕對值少於0.00001。 輸出保留3位小數 輸入 X 輸出 X的平方根 樣例輸入 4 樣例輸出 2.000 來