2011-12-19 92 views
0

我有一個包含兩個colums類型貨幣的列表。我希望能夠讀取這個字段中的小數位和包含的currecy符號的值。獲取貨幣列表項目值

我已經嘗試了三種不同的方法,但我似乎只能得到數字而不是currecny符號。還有十進制值沒有正確顯示。使用小數類型的列是「InstallCosts」和「RentalCosts」。

foreach (SPListItem item in listItemCollection) 
{ 
try 
{ 
string MPLS; 
if ((bool)item["MPLS"]) 
MPLS = "Yes"; 
else 
MPLS = "No"; 

//Conversion 1 
double installCost; 
bool convert1 = double.TryParse(item["InstallCosts"].ToString(), out installCost); 

double rentalCost; 
bool convert2 = double.TryParse(item["RentalCosts"].ToString(), out rentalCost); 


//Conversion 2 
string install = item["InstallCosts"].ToString(); 
double installConverted = double.Parse(install, NumberStyles.Currency, 
CultureInfo.CurrentCulture.NumberFormat); 

//Conversion 3 
//string converThis = String.Format("[0:c}", (string)item["InstallCosts"]); 


string results56 = (string)item["Title"] + " " + (string)item["DefinedFor"] + " " + 
"<b>MPLS:</b> " + MPLS + "<br/>" + "<b>Max Downstream:</b> " + 
(string)item["MaxDownstream"] + "<br/>" + "Install Cost:" + converThis + "<br/>" 
+ "Rental Cost (p.a.):" + rentalCost + "<br/>"; 

AvailabilityCheckerResultsTwo.Controls.Add(new LiteralControl(results56)); 
} 

結果如下:CCTV第三方遠程訪問互動模式和網站測試:

羊駝髒的ADSL產品。 MPLS:沒有 最大下行: 安裝成本:50 租金成本(PA):425.7

爲 「安裝費用」 的resuts應該是:£50.00 的 「租金」 的結果應該是:£425.70

我一直在困擾這個問題一天,將不勝感激任何援助其可能是我失蹤的東西,但我真的不能看到什麼!

非常感謝,

+4

切勿使用雙重貨幣,您將開始看到因處理精度而產生的細微損失。僅使用小數。 – OmegaMan 2011-12-19 15:43:16

+1

'double less = 0.3;雙倍多= 0.4; double diff = 0.1;返回更多 - 少==差異; // false!' – ANeves 2011-12-19 15:48:56

回答

2

在.net中的數字不包含任何貨幣或任何其他格式信息。因此,您必須自行添加貨幣符號:

SPListItem item = ...; 
double d = Convert.ToDouble(item["InstallCosts"]); 
// will display the number in the current threads culture. In the US: $ <value> 
string currency = d.ToString("C"); 
+0

打了我幾秒鐘:)而OmegaMan建議使用十進制通常最適合貨幣。並非我認爲在這種情況下會有一個明顯的差異。 – 2011-12-19 15:51:45

+0

嘿斯特凡,非常感謝你的伎倆。它顯示的值應該是正確的格式,例如。 £50.00。非常感激 – 2011-12-19 15:57:10