2015-03-25 3 views
-1

Код в первую очередь.C# Десятичные выпуски

taxRateDecimal = 0.0765; 
if (taxRateDecimal.ToString().Split('.').Length == 2) 
{ 
    outPut = taxRateDecimal.ToString().Split('.')[1].Substring(0, 4); 
    ReportParameters.Add("TaxRateAsDecimal", "." + outPut); 
} 

Как вы можете видеть в подстроках я должен жестко закодировать мою длину 4. желаемых результатов .0765 как строка.

Вот некоторые сценарии, которые я пережил.

У меня есть процент 7.65. Я хочу преобразовать это в десятичную, при этом я делаю 7.65/100. это дает мне 0.0765, но я хочу просто 0,075. Если я принимаю 0.0765 и использую раскол на "." и использовать длину ect .. На самом деле я получаю для массива [1] длину 6 и значение 076500. Опять я хочу только 0,0765 или только 0765, и я могу добавить точку.

Любые другие идеи, которые я не пробовал? В конце концов, это будет строка, поскольку я передаю ее в виде прамы в SSRS.

+1

Вы просто пытаетесь форматировать десятичную строку в строку? – ryanyuyu

+0

http://stackoverflow.com/questions/164926/c-sharp-how-do-i-round-a-decimal-value-to-2-decimal-places-for-output-on-a-pa его не именно то, что вы хотите, но оно должно помочь. – marsh

+1

Опечатка: '7.65 * 100' должно быть' 7.65/100' –

ответ

1

string.Format справится с этим легко.

double taxRateDecimal = 1.0765; 
string formattedResult = string.Format("{0:.0000}", taxRateDecimal % 1); 

Console.WriteLine(formattedResult); // .0765 
2

Вы должны быть в состоянии использовать формат для создания строки:

var taxRateDecimal = 0.0765D; 
var reportParameter = taxRateDecimal.ToString(".0000", CultureInfo.InvariantCulture); 

Полученный reportParameter является .0765.

Другие результаты для этого формата являются:

 
0D  -> .0000 
1D  -> 1.0000 
1.23456D -> 1.2346 

Вы должны использовать CultureInfo.InvariantCulture, чтобы быть уверенным, что десятичный разделитель точка. В противном случае текущая культура (которая является значением по умолчанию) может указывать запятую как разделитель десятичной дроби.