0
点赞
收藏
分享

微信扫一扫

C#.Net工作笔记006---关于各种四舍五入_小数点保留第几位等操作_随时更新

49路末班车 2022-03-25 阅读 31


​​技术交流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的情况比较特殊,如果前面是奇数,则升上去,反之,则截掉,在金融结算中,经常使用该方法,来平衡双方的盈亏



举报

相关推荐

0 条评论