0

У меня есть список, который содержит два столбца, которые являются валютой типа. Я хочу иметь возможность читать значения из этого поля с десятичными знаками и включенным символом курсора.Получение значений позиции списка валют

Я пробовал три разных метода, но я только, кажется, получаю цифры, а не курчавый символ. Также десятичные значения не отображаются должным образом. Столбцы, которые используют десятичный тип, это «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)); 
} 

В результате получается следующее:

Альпака Грязный ADSL продукт для: CCTV сторонних удаленного доступа интерактивные модели и веб-сайт тестирования. MPLS: Нет Max Downstream: Установить Стоимость: 50 Стоимость аренды (в год): 425,7

The resuts для "Установить стоимость" должна быть: £ 50,00 Результат для "Стоимость аренды" должно быть: £ 425,70

Я застрял с этой проблемой в течение дня, буду признателен за любую помощь, возможно, что-то мне не хватает, но я не могу понять, что!

Большое спасибо,

+4

Никогда не используйте double для валюты, вы начнете видеть тонкие потери из-за точности обработки. Используйте только десятичное значение. – OmegaMan

+1

'double less = 0.3; double more = 0,4; двойной diff = 0,1; вернуться больше - меньше == diff; // false! ' – ANeves

ответ

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 предложил использовать Decimal, обычно лучше всего подходит для валюты. Не то чтобы я думал, что в этом сценарии будет заметная разница. –

+0

Эй, Стефан, Спасибо, что сделал трюк. он отображает значения, поскольку они должны быть в правильном формате, например. £ 50,00. Очень признателен –

Смежные вопросы