c# - 重新格式化字符串数值以使用减号而不是括号来表示负数
问题描述
我建立了一个服务来从我的新主要经纪人那里读取交易数据的 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,但我可能没有看到更简单的解决方案。
解决方案
代替 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) ...
推荐阅读
- python - 我想将我的谷歌驱动器中的多个 csv 文件合并到 pandas
- excel - 突出显示各列每行中的最高值
- c# - 使 WPF 文本调整大小以填充空间
- java - LibGDX RayHandler:禁用像素解包缓冲区对象时无法使用偏移量
- batch-file - 如何使用findstr排除批处理中特殊字符的输入?
- node.js - 运行 npm start 时的问题
- postgresql - 如何索引并使 WHERE 子句不区分大小写?
- python - 第二次发布后烧瓶 api 崩溃
- wordpress - 将 wp 评论显示为拒绝所有用户
- python - 使用 Python 3 将 csv 的列打印为列表,然后使用 Matplotlib 制作图表