You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 01:04:57