Net中Math.Round与四舍五入
有不少人误将Math.Round函数当作四舍五入函数在处理, 结果往往不正确, 实际上Math.Round采用的是国际通行的是 Banker 舍入法. Banker's rounding(银行家舍入)算法,即四舍六入五取偶
而出现问题的单价就是1.865,函数Math.Round(1.865,2)的返回值却是1.86,按照四舍五入的原则,结果应该是1.87才对。
原来四舍五入也有个国际惯例,叫奇进偶舍,意思是当舍入位前面一位是奇数时,就进,为偶数时,就舍,这也是体现公平性的原理。
采用Math.Round(price,2,MidpointRounding.AwayFromZero)就可以了。