在处理一些数据时,我们希望能用“四舍五入”法实现,但是C#采用的是“四舍六入五成双”的方法,如下面的例子,就是用“四舍六入五成双”得到的结果:
double
d1
=
Math.Round(
1.25
,
1
);
//
1.2
double d2 = Math.Round( 1.24 , 1 ); // 1.2
double d3 = Math.Round( 1.26 , 1 ); // 1.3
double d4 = Math.Round( 1.35 , 1 ); // 1.4
double d2 = Math.Round( 1.24 , 1 ); // 1.2
double d3 = Math.Round( 1.26 , 1 ); // 1.3
double d4 = Math.Round( 1.35 , 1 ); // 1.4
为了用C#来实现“四舍五入”,我写了下面的函数:
/**/
/// <summary>
/// 实现数据的四舍五入法
/// </summary>
/// <param name="v">要进行处理的数据</param>
/// <param name="x">保留的小数位数</param>
/// <returns>四舍五入后的结果</returns>
private double Round( double v, int x)
... {
bool isNegative = false;
//如果是负数
if (v < 0)
...{
isNegative = true;
v = -v;
}
int IValue = 1;
for (int i = 1; i <= x; i++)
...{
IValue = IValue * 10;
}
double Int = Math.Round(v * IValue + 0.5,0);
v = Int / IValue;
if (isNegative)
...{
v = -v;
}
return v;
}
/// 实现数据的四舍五入法
/// </summary>
/// <param name="v">要进行处理的数据</param>
/// <param name="x">保留的小数位数</param>
/// <returns>四舍五入后的结果</returns>
private double Round( double v, int x)
... {
bool isNegative = false;
//如果是负数
if (v < 0)
...{
isNegative = true;
v = -v;
}
int IValue = 1;
for (int i = 1; i <= x; i++)
...{
IValue = IValue * 10;
}
double Int = Math.Round(v * IValue + 0.5,0);
v = Int / IValue;
if (isNegative)
...{
v = -v;
}
return v;
}
经过简单的测试,上面的函数能实现对数据的四舍五入法。