问题描述
我正在使用 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);