2012-02-13 58 views
2

我嘗試如何聚合小數使用LINQ

Collection.Aggregate(0.0,(current, next) => current += next.decimalValue); 

,但我得到的鑄造小數點錯誤翻番

另一個問題:對於「總和」 LINQ的種子是默認類型值? 意義種子= 0,小數...

回答

4

編譯器把0.0爲double,你需要指定類型爲十進制。請嘗試以下操作:

Collection.Aggregate(0m, (current, next) => current += next.decimalValue); 

The m suffix表示該數值實數(在這種情況下0)是一個小數。

+0

對於「總和」Linq種子是默認的類型值?意思是seed = 0表示小數...... – 2012-02-13 18:38:43

+0

我不確定它有什麼含義,但是你可以使用運算符'+'而不是'+ ='。 – 2017-10-17 14:23:10

+1

@Jp_不會有功能改變,但會刪除一個不必要的賦值(並且使代碼更清晰,因爲當前不被ref傳遞)...使用'+'而不是'+ ='會是一個改進! – 2017-10-18 12:18:11

1

0.0是雙你必須明確地創建一個十進制:

Collection.Aggregate(new decimal(0.0), (current, next) => current += next.decimalValue); 
+2

此語法聲明'double' - '0.0' - 然後轉換是雙成'decimal'。爲什麼不直接使用'm'後綴聲明'decimal'? (我懷疑你會冒着轉換/舍入錯誤的風險,把一些非零的'double'值傳遞給'decimal'構造函數。) – LukeH 2012-02-13 16:53:05

+1

你應該使用十進制文字('0.0m')而不是新的一個小數,接收雙字面 – Randolpho 2012-02-13 16:53:11

+1

是的,我從另外兩個答案中收集了這個。真相是我不知道這是可能的,我回顧了一段時間,但無法找到一種方法來做十進制。當然,我顯然沒有做出足夠的努力去找到答案。但我現在得到它免費:) – Terkel 2012-02-13 16:56:32

2

你試過0.0M

Collection.Aggregate(0.0M,(current, next) => current += next.decimalValue);