Math.Round到底是"四舍五入"还是"五舍六入"
环境VS2005,VS2003没有测试。
msdn并没有详细的说明清楚,给了一个例子;
Math.Round (Decimal, Int32) | 将小数值舍入到指定精度。 由 .NET Compact Framework 支持。 |
Math.Round (Double, Int32) |
将双精度浮点值舍入到指定精度。 由 .NET Compact Framework 支持。 |
msdn并没有详细的说明清楚,给了一个例子;
Math.Round(3.44, 1); //Returns 3.4. Math.Round(3.45, 1); //Returns 3.4. Math.Round(3.46, 1); //Returns 3.5.
依照他的例子得到的是"五舍六入",我改变了一下数字得到的结果将完全改变。
Math.Round(3.445, 1); //Returns 3.4.
Math.Round(3.455, 1); //Returns 3.5.
Math.Round(3.465, 1); //Returns 3.5.
Math.Round(3.450, 1); //Returns 3.4.(补0是无效的)
Math.Round(3.4452, 2); //Returns 3.45.
Math.Round(3.4552, 2); //Returns 3.46.
Math.Round(3.4652, 2); //Returns 3.47.
非常奇怪当你需要获得小数点后面一位时,第一位参数必需要比你需要的位数多出两位数时才是正常的“四舍五入”,否则将是“五舍六入”,看来只能自已写四舍五入的算法,不能依赖Math.Round,否则我无法知道他何时使用四舍还是五舍,除非你定死你的第一位参数的位数。