Math.Round()这个函数是按照四舍六入五留双(银行家算法)的原则进行取舍的
但是有几个数字却没有按照银行家算法,不知道为什么??
Math.Round() 结果
1. Math.Round(1.205, 2) 1.2
2. Math.Round(1.225, 2) 1.23
3. Math.Round(1.265, 2) 1.26
4. Math.Round(1.285, 2) 1.28
5. Math.Round(1.325, 2) 1.32
红色标记的是有问题的,按照5的前面一位是2,是偶数,应该就是舍去5,变成1.22,结果是1.23?
这是为什么?
附件里是DEBUG的截图。
但是有几个数字却没有按照银行家算法,不知道为什么??
Math.Round() 结果
1. Math.Round(1.205, 2) 1.2
2. Math.Round(1.225, 2) 1.23
3. Math.Round(1.265, 2) 1.26
4. Math.Round(1.285, 2) 1.28
5. Math.Round(1.325, 2) 1.32
红色标记的是有问题的,按照5的前面一位是2,是偶数,应该就是舍去5,变成1.22,结果是1.23?
这是为什么?
附件里是DEBUG的截图。
/*
This code example produces the following results: 3.4 = Math.Round( 3.45, 1)
-3.4 = Math.Round(-3.45, 1) 3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)*/1. Math.Round(1.205, 2) 1.2
2. Math.Round(1.225, 2) 1.23
3. Math.Round(1.265, 2) 1.26
4. Math.Round(1.285, 2) 1.28
5. Math.Round(1.325, 2) 1.32
红色标记的是有问题的,按照5的前面一位是2,是偶数,应该就是舍去5,变成1.22,结果是1.23?
这是为什么?
附件里是DEBUG的截图。
答案 Math.Round( num, 2, MidpointRounding.ToEven);
Decimal.Round(d, 2, MidpointRounding.ToEven).ToString();
结果就是1.22
Math.Round((decimal)1.225, 2) 1.22
我就是这样写的,我的附件里就是这样的,
Math.Round( num, 2, MidpointRounding.ToEven);
结果还是1.23
它默认就是用MidpointRounding.ToEven这种的
vrhero
正解
看来以后要注意了,
Double类型