2011-04-22 162 views
4

我正在做一些數學計算。這裏是我的代碼:從十進制轉換爲浮點數

decimal FirstYr = decimal.Round((first/second), 5); 

如果我傳遞first = 20second = 34,我得到的0.58824值在FirstYr。這很好。現在我在我的LINQ在這裏做這樣的計算:

ev.HiComm = (float)(FirstYr * 100); 

HiComm是漂浮在DB,這上面的計算是通過值:58.824001312255859

哪個我不希望它。我想在我的ev.HiComm = 58.824

我在做什麼錯在這裏?

+0

這可能會讓你感興趣:http://stackoverflow.com/questions/122523/why-is-a-sql-float-different-from-ac-float – womp 2011-04-22 17:02:02

+1

任何原因,你不只是多個第一行代碼由100 – TheLukeMcCarthy 2011-04-22 17:06:02

+0

我可以做到這一點,但無論哪種方式,我需要將其轉換爲浮動! – 2011-04-22 17:08:14

回答

0

它的工作像這樣在後面的代碼:

decimal FirstYr = decimal.Round((first/second), 5)*100; 
ev.HiComm = (double)FirstYr ; 

感謝您的建議!

+1

您所做的只是將一個小數轉換爲double,這引發了您在數據庫中使用float(decmial)值的原因。 – 2011-04-22 17:51:36

3

如果你想正好在點後3個位置,你必須改變你的sql字段爲decimal(x,3),其中x是3加上你在小數點之前需要的最大位置。 float不能存儲你想要的確切值。

+0

我沒有控制數據庫。我可以在C#代碼中做些什麼嗎? – 2011-04-22 16:55:24

+0

將從db讀取的值處理回您想要的格式?如果你的價值需要精確,那麼'浮動'就不夠了。 – lincolnk 2011-04-22 16:58:13

+0

@Mayank Raj:只要您從數據庫中獲取數據,您可以做的唯一事情就是將數值四捨五入爲小數點後三位。 – 2011-04-22 16:59:47