嘗試:
double grossprofit_LT = gridData.Select(x =>
{
var styles = NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint;
if (x.Profit.StartsWith("-"))
return (double?) double.Parse(x, styles);
if (x.Profit.Contains('.'))
return (double?) double.Parse(x,styles, CultureInfo.InvariantCulture);
var seperator = CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator;
if (x.Profit.Contains(',') && seperator == ",")
return (double?) double.Parse(x, styles);
return null;
}).Where(x => x.HasValue).Sum(x => x.Value);
這將處理所有的值,如:
-3
-2.23
1,15
,並返回them.If的總和,你不希望包括負數只是刪除的首要條件。 if (x.Profit.StartsWith("-"))
UPDATE:如果你想讓它更簡單,和你的價值觀不包含任何點或逗號,你可以只使用
gridData.Where(x => !x.Profit.Contains("-"))
.Select(x => double.Parse(x.Profit.Trim())
.Sum();
您與-
比較Profit
在你的代碼中。但可能你的一些值是以-
開頭的,所以你會得到格式異常。請改用Contains
或StartsWith
方法。
Convert.ToInt32(n.Profit)
這將拋出一個異常,如果你想轉換的字符串實際上不是一個整數:
是' - 「記錄中唯一的東西(也許意味着沒有該單元格的值),或者它是數字的一部分(比如'-5')?你真的在問如何從總和中排除負數(你的代碼已經用'> = 0'完成了)? –
@GrantWinney不,只是具有「 - 」值的數據,所以我不能使用.contains爲什麼負數也包含「 - 」 – Elegiac
所以你想包括負數的總和? –