基于 DataTable 的 NuGet 包四舍五入到 2 个小数点

问题描述

我正在使用 ConsoleTableExt 打印表格。我想将几个小数四舍五入到 2 分。 NuGet 包正在使用 DataTable。目前,我正在使用 .ToString(f2"),但我阅读了一篇文章,其中指出在 DataTable 中执行此操作是一种不好的做法。有什么建议吗?

// Main()
var tableBuilder = ConsoleTableBuilder.From(backtest.ReportResults(backtestResults)).WithFormat(ConsoleTableBuilderFormat.Alternative);
    tableBuilder.ExportAndWriteLine();

public static DataTable ReportResults(List<BacktestResult> backtestResults)
{
    var table = new DataTable();
    table.Columns.Add("Pair",typeof(string));
    table.Columns.Add("Trades",typeof(int));
    table.Columns.Add("Average Profit %",typeof(string));
    table.Columns.Add("Cumulative Profit %",typeof(string));
    table.Columns.Add($"Total Profit",typeof(string));
    table.Columns.Add($"Total Profit %",typeof(string));

    foreach (var pair in _backtestOptions.Pairs)
    {
        var results = backtestResults.Where(e => e.Pair.Equals(pair)).ToList();

        var Trades = results.Count;
        var profitMean = results.Count > 0 ? results.Average(e => e.ProfitPercentage) : 0;
        var profitMeanPercentage = results.Count > 0 ? results.Average(e => e.ProfitPercentage) * 100 : 0;
        var profitSum = results.Sum(e => e.ProfitPercentage);
        var profitSumPercentage = results.Sum(e => e.ProfitPercentage) * 100;
        var profitTotalAbs = results.Sum(e => e.ProfitAbs);
        var profitTotal = results.Sum(e => e.ProfitAbs) / 1;
        var profitTotalPercentage = results.Sum(e => e.ProfitPercentage) * 100;
        table.Rows.Add(pair,Trades,profitMeanPercentage.ToString("f2"),profitSumPercentage.ToString("f2"),profitTotalAbs.ToString("f8"),profitTotalPercentage.ToString("f2"));
    }

    return table;
}

解决方法

您可以使用 Round 的函数 Math 来获取舍入值。 Round(double value,MidpointRounding mode) 其中第二个参数指定如何舍入值,如果它位于两个其他数字的中间。

示例:

decimal decimalVal = 123.456M;
Math.Round(decimalVal,2);