我嘗試如何聚合小數使用LINQ
Collection.Aggregate(0.0,(current, next) => current += next.decimalValue);
,但我得到的鑄造小數點錯誤翻番
另一個問題:對於「總和」 LINQ的種子是默認類型值? 意義種子= 0,小數...
我嘗試如何聚合小數使用LINQ
Collection.Aggregate(0.0,(current, next) => current += next.decimalValue);
,但我得到的鑄造小數點錯誤翻番
另一個問題:對於「總和」 LINQ的種子是默認類型值? 意義種子= 0,小數...
編譯器把0.0
爲double,你需要指定類型爲十進制。請嘗試以下操作:
Collection.Aggregate(0m, (current, next) => current += next.decimalValue);
The m
suffix表示該數值實數(在這種情況下0
)是一個小數。
0.0
是雙你必須明確地創建一個十進制:
Collection.Aggregate(new decimal(0.0), (current, next) => current += next.decimalValue);
此語法聲明'double' - '0.0' - 然後轉換是雙成'decimal'。爲什麼不直接使用'm'後綴聲明'decimal'? (我懷疑你會冒着轉換/舍入錯誤的風險,把一些非零的'double'值傳遞給'decimal'構造函數。) – LukeH 2012-02-13 16:53:05
你應該使用十進制文字('0.0m')而不是新的一個小數,接收雙字面 – Randolpho 2012-02-13 16:53:11
是的,我從另外兩個答案中收集了這個。真相是我不知道這是可能的,我回顧了一段時間,但無法找到一種方法來做十進制。當然,我顯然沒有做出足夠的努力去找到答案。但我現在得到它免費:) – Terkel 2012-02-13 16:56:32
你試過0.0M
:
Collection.Aggregate(0.0M,(current, next) => current += next.decimalValue);
對於「總和」Linq種子是默認的類型值?意思是seed = 0表示小數...... – 2012-02-13 18:38:43
我不確定它有什麼含義,但是你可以使用運算符'+'而不是'+ ='。 – 2017-10-17 14:23:10
@Jp_不會有功能改變,但會刪除一個不必要的賦值(並且使代碼更清晰,因爲當前不被ref傳遞)...使用'+'而不是'+ ='會是一個改進! – 2017-10-18 12:18:11