C#中如何正确对数字四舍五入?解决Math.Round处理10.5结果错误问题
C# 实现指定四舍五入需求的解决方案
问题原因
你当前代码运行结果不符合预期,是因为C#中Math.Round方法默认采用银行家舍入规则(四舍六入五成双):当数值的小数部分恰好为0.5时,会返回距离最近的偶数。因此1.5会舍入为2(1是奇数,向上取偶),10.5会舍入为10(10本身是偶数,无需进位),和你需要的「小数部分≥0.5即进位」的常规四舍五入逻辑不符。
修复代码
调用Math.Round时显式指定舍入模式为MidpointRounding.AwayFromZero即可,该模式的逻辑为:当小数部分等于0.5时,始终向绝对值更大的方向舍入,也就是常规认知里的四舍五入。
修正后的代码如下:
private void textBox1_TextChanged(object sender, EventArgs e) { decimal inputValue = Convert.ToDecimal(textBox1.Text); textBox2.Text = Math.Round(inputValue, 0, MidpointRounding.AwayFromZero).ToString(); }
效果验证
针对你给出的测试用例,修正后输出完全符合预期:
- 输入1.5 → 输出2
- 输入2.6 → 输出3
- 输入2.499 → 输出2
- 输入10.5 → 输出11
- 输入11.4999 → 输出11
内容的提问来源于stack exchange,提问作者user15897210
相关产品推荐
相关产品推荐

