C#中如何用Round函数按指定整位规则将小数转整数?
四舍五入到指定位数的实现问题
需求说明
- 四舍五入到千位(后三位为0,无小数):例如89231.1转为89000,67898.125转为68000
- 四舍五入到十位(最后一位为0,无小数):例如89.6转为90,87.36转为90
- 四舍五入到个位(无小数):例如75.6转为76
遇到的问题
尝试使用Math.Round()函数无法满足所有场景,例如以下代码:
var formula = (((50.2564 * 10*110)+5000); var cal_value = Evaluate(formula); calculated_value = Math.Round(cal_value, 0).ToString();
其中Evaluate方法实现如下:
static double Evaluate(string expression) { try { var loDataTable = new DataTable(); var loDataColumn = new DataColumn("Eval", typeof(double), expression); loDataTable.Columns.Add(loDataColumn); loDataTable.Rows.Add(0); return (double)(loDataTable.Rows[0]["Eval"]); } catch (Exception e) { return 0; } }
当前计算未四舍五入结果为60282.04,Math.Round(cal_value, 0)得到60282,但实际需要的结果是60000。
解决方案
针对不同的四舍五入需求,可以通过缩放数值的方式实现:
1. 四舍五入到千位
double roundedToThousands = Math.Round(cal_value / 1000) * 1000;
原理:先将数值除以1000,把千位转为个位,使用Math.Round()四舍五入后再乘以1000恢复原量级。
2. 四舍五入到十位
double roundedToTens = Math.Round(cal_value / 10) * 10;
原理:类似千位处理,除以10后四舍五入,再乘以10。
3. 四舍五入到个位
直接使用Math.Round(cal_value, 0)即可满足需求,这属于Math.Round的默认适用场景。
完整修正示例代码
var formula = "((50.2564 * 10*110)+5000)"; // 修正原公式的语法错误(补全闭合括号) var cal_value = Evaluate(formula); // 四舍五入到千位并格式化输出 double roundedToThousands = Math.Round(cal_value / 1000) * 1000; string calculated_value = roundedToThousands.ToString("N0"); Console.WriteLine(calculated_value); // 输出:60,000
注意:原代码中的公式存在语法错误,需先补全闭合括号才能正确计算。
内容的提问来源于stack exchange,提问作者Srusti Thakkar
相关产品推荐
相关产品推荐

