最近研究round函数,发现两个古怪的问题,特发出来大家探讨探讨.第一个问题 round()的第三个参数MidpointRounding???
//原型
    public enum MidpointRounding
    {
        // 摘要:
        //     当一个数字是其他两个数字的中间值时,会将其舍入为最接近的偶数。
        ToEven = 0,
        //
        // 摘要:
        //     当一个数字是其他两个数字的中间值时,会将其舍入为两个值中绝对值较小的值。
        AwayFromZero = 1,
    }按MSDN解释,当指定"MidpointRounding.ToEven"时,就相当于四舍六入五成双,当指定"MidpointRounding.AwayFromZero"时,应该返回较小的值,但实际使用时,却奇怪的很!见下:
double a=33.265,b=33.285;
Math.Round(a, 2, MidpointRounding.AwayFromZero) 结果=33.27 !
Math.Round(b, 2, MidpointRounding.AwayFromZero) 结果=33.28 !!!为什么?网上找到个解释说AwayFromZero其实是返回较大的值(MSDN解释错!),但也无法解释b的值啊...第二个问题 float 和 double区别对待?
float f1=33.295f,f2=33.275f;
double d=33.295;
Math.Round(f1, 2, MidpointRounding.ToEven) 结果=33.29 !
Math.Round(f2, 2, MidpointRounding.ToEven) 结果=33.28 !
Math.Round(d, 2, MidpointRounding.ToEven) 结果=33.3 !晕!