C#.Net工作筆記006---關於各種四捨五入_小數點保留第幾位等操作_隨時更新

技術交流QQ羣【JAVA,C++,Python,.NET,BigData,AI】:170933152 

今天做項目,各種切小數點,金融中可能用的不是4舍5入,可能是4舍6入5成雙.

1.關於截取小數點第幾位(保留幾位小數,非4舍5入),直接捨去

用下面的方法可以實現,一個方法,一個重載方法

 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);
        }

        public static decimal CutDecimalWithN(decimal? d, int n)
        {
            if (d==null) {
                return Decimal.MinValue;
            }
          return  CutDecimalWithN(Convert.ToDecimal(d), n);
        }

2. decimal.Round 四捨五入和銀行家算法的(四捨六入五成雙)

decimal.Round(xx, decimalPos, MidpointRounding.ToEven);

VS

decimal.Round(xx, decimalPos, MidpointRounding.AwayFromZero);

 

AwayFromZero, 就是常用的四捨五入.

 

ToEven, 就比較特別了,稱爲就近舍入或四捨六入五成雙

e.g.

        22.333        to         22.33
        22.335        to         22.34
        22.325        to         22.32
        22.336        to         22.34
        22.326        to         22.33

後面是5的情況比較特殊,如果前面是奇數,則升上去,反之,則截掉,在金融結算中,經常使用該方法,來平衡雙方的盈虧
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章