微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决基于 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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。