2011-01-31 31 views
0

我在CSV形式以下值 -在CSV值小數點導致值增加錯誤

事實上,圓通

10.5,11.5

15.5,16.5

我送這些到一個Web服務,他們正在存儲在數據庫中。來自Web服務的響應應該等於它們各自列中的值的總和,即對於'事實',響應迴應應該等於10.5 + 15.5,因此= 26, 和'機智'11.5 + 16.5因此= 28.

但是deciaml點似乎導致的結果響應的問題,並獲得「事實」 = 25「機智」 = 27

我使用下面的代碼找到後忽略了數字在csv中的適當值並將其設置爲對象數組中的某個位置 -

upDateFeed[i] = new webservice.upDateFeed(); 

upDateFeed[i].fact = (int)System.Convert.ToDouble(el.Descendants("var").Where(x => (string)x.Attribute("name") =="fact").SingleOrDefault().Attribute("value").Value); 
upDateFeed[i].tact = (int)System.Convert.ToDouble(el.Descendants("var").Where(x => (string)x.Attribute("name") =="tact").SingleOrDefault().Attribute("value").Value); 

我怎樣才能得到它取決於考慮點後的數字?

謝謝你的時間。

+0

'el'是什麼?什麼是`webservice.upDateFeed()`? – tster 2011-01-31 13:45:15

回答

3

您明確將double轉換爲int,您會發生什麼? :)

+0

我同意。你必須解開(雙)不(int)。 – Lane 2011-01-31 13:48:02

0

如果Web服務將只接受int的,你將無法得到你想要的數字。它總是會四捨五入

upDateFeed [I] .fact

upDateFeed [I] .tact

都需要是具有小數位的類型,你正在做的int投指小數點正在被刪除。我假設,因爲web服務只接受ints而不是小數。如果是這種情況,則需要更改Web服務。

+0

感謝輸入@Kev,只是要問,我確實嘗試了幾件事情,它總是讓我回到你所說的話 - 我相信Web服務被配置爲接受事實和機智作爲整數,因此我不可能發送任何其他內容? – Ebikeneser 2011-01-31 14:12:33

+0

是的,這是我所期望的,如果你不能改變你被卡住的網絡服務 – 2011-02-01 15:02:06

1

您正在將您的double轉換爲int,這意味着它將刪除任何浮點精度。你需要更新你的upDateFeed類,期望double而不是int,然後你不需要做任何演員。

另外,僅從可讀性的角度來看,您應該稍微分解一下代碼,以便清楚地看到自己在做什麼。

相關問題