首页 > 解决方案 > 重新格式化字符串数值以使用减号而不是括号来表示负数

问题描述

我建立了一个服务来从我的新主要经纪人那里读取交易数据的 csv 文件。这些文件显示负数的这种格式。

负数格式

这是读取文件和处理的代码(仅显示我检查重复符号的部分,因为我存储在 Azure 表中并且不能有重复的符号,因为符号是行键)

for (var i = 0; i < records.Count - 1; i++)
        {
            //check if symbol is a duplicate
            if (i>0 && records[i].Symbol == records[i - 1].Symbol)
            {    //sum the columns in records[i] and records[i-1]
                //change ent for symbol to new values
                entities[i - (1 + dupeRecords)].CommissionPl = Convert.ToDouble(records[i].CommissionPl) + Convert.ToDouble(records[i - 1].CommissionPl).ToString(CultureInfo.InvariantCulture);
                entities[i - (1 + dupeRecords)].PositionPl = Convert.ToDouble(records[i].PositionPl) + Convert.ToDouble(records[i - 1].PositionPl).ToString(CultureInfo.InvariantCulture);
                entities[i - (1 + dupeRecords)].TransactionPl = Convert.ToDouble(records[i].TransactionPl) + Convert.ToDouble(records[i - 1].TransactionPl).ToString(CultureInfo.InvariantCulture);
                entities[i - (1 + dupeRecords)].TotalPl = Convert.ToDouble(records[i].TotalPl) + Convert.ToDouble(records[i - 1].TotalPl).ToString(CultureInfo.InvariantCulture);
                // do not create new ent for this record
                //count the dupe entries for the entities index to match up
                dupeRecords++;
            }

问题在于这些条目(即记录 [i - 1].TotalPl 等)为负数,尽管在处理过程中将鼠标悬停在文件上时,文件中显示 -100(例如)显示为 (100)。当它们为括号格式时,Convert.ToDouble 函数无法处理它们。

在迭代记录时,我想不出一种简单的方法来重新格式化字符串值。我可以检查括号,然后将它们剥离并乘以 -1,但我可能没有看到更简单的解决方案。

标签: c#formatting

解决方案


代替 using Convert.ToDouble,使用double.Parse并指定您允许的格式:

NumberStyles styles = NumberStyles.AllowParentheses | NumberStyles.AllowTrailingSign | NumberStyles.Float | NumberStyles.AllowThousands;
entities[i - (1 + dupeRecords)].CommissionPl = double.Parse(records[i].CommissionPl, styles)  ...

推荐阅读