用三种方法过滤三个数字,这三个方法的作用分别是:
完全舍掉小数点后面的小数 / 无条件进位 / 四舍五入
前两种可以到msdn里面找到对应的方法,分别是 Math.Floor() 和 Math.Ceiling() 。
可“四舍五入”就找不到了,找到了一个所谓的“五舍六入”。
注:其实 Math.Round() 也不是纯粹的“五舍六入”,有一定的“猫腻儿”,其相关请查阅msdn。
后感觉想要做到“四舍五入”好像也不是很难,故尝试去写这个Method,代码如下:
using System;
class CustomRound
{
public static void Main()
{
decimal rsa = CustomRound.MyRound(2300.49m);
decimal rsb = CustomRound.MyRound(2300.50m);
Console.WriteLine(rsa);
Console.WriteLine(rsb);
}
public static decimal MyRound(decimal num)
{
decimal dcNum = num;
double dbNum = Convert.ToDouble(dcNum);
double iNum = Math.Floor(dbNum);
double cNum = dbNum - iNum;
if (cNum >= 0.5)
{
cNum = 1;
}
else
{
cNum = 0;
}
decimal dcCNum = Convert.ToDecimal(cNum);
decimal dcINum = Convert.ToDecimal(iNum);
return dcINum + dcCNum;
}
}
class CustomRound
{
public static void Main()
{
decimal rsa = CustomRound.MyRound(2300.49m);
decimal rsb = CustomRound.MyRound(2300.50m);
Console.WriteLine(rsa);
Console.WriteLine(rsb);
}
public static decimal MyRound(decimal num)
{
decimal dcNum = num;
double dbNum = Convert.ToDouble(dcNum);
double iNum = Math.Floor(dbNum);
double cNum = dbNum - iNum;
if (cNum >= 0.5)
{
cNum = 1;
}
else
{
cNum = 0;
}
decimal dcCNum = Convert.ToDecimal(cNum);
decimal dcINum = Convert.ToDecimal(iNum);
return dcINum + dcCNum;
}
}
因为要求进/出都是decimal类型,所以里面有很多的转换过程,看着较乱,可以再整理。
该method只经过了简单的测试,使用之前建议多做一些临界数据测试。