技術交流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的情況比較特殊,如果前面是奇數,則升上去,反之,則截掉,在金融結算中,經常使用該方法,來平衡雙方的盈虧