, что если у меня есть два блока, которые генерируют строки, и я хочу сохранить все строки в одном массиве
blockquote>Если блоки являются отдельными программными модулями или иным образом отключены, возможно, даже может Для выполнения в разных порядках вам нужна логика, которая может определить, заполнен ли целевой массив. Одним из решений является использование (частной) процедуры PL / SQL для управления этим.
procedure populate_varray ( p_tgt in out name_options , p_new in name_options) is n pls_integer; begin if p_tgt is null or p_tgt.count() = 0 then p_tgt := p_new; elsif p_new is not null and p_new.count() > 0 then n := p_tgt.count(); for idx in 1 .. p_new.count() loop p_tgt.extend(); p_tgt(n + idx) := p_new(idx); end loop; end if; end populate_varray;
Примечание: непроверенный код, пожалуйста, прокомментируйте ниже, если есть ошибки:)
Вы бы назвали это так:
-- Block 1 .... populate_varray ( dd_name_options_c , name_options(string1, string2, string3, string4)); .... -- Block 2 .... populate_varray (dd_name_options_c , name_options(string5, string6) );
Игнорируя Ваши требования выравнивания, Вы могли использовать
number.ToString("€#,##0.00;(€#,##0.00);Zero")
к отрицательным числам скобки.
Для выравнивания чисел необходимо было бы отформатировать без обозначения денежной единицы и заполнить отформатированные числа сами пробелами, использование шрифта фиксированной ширины сделает это задание легче для Вас.
Править:
Это кажется Строкой. Формат является Вашим другом:
String.Format("{0,15:#,##0.00 ;(#,##0.00);- }", number)
где 15 общая ширина вывода, и необходимо добавить этот текст к обозначению денежной единицы. (Снова, это выравнивается только в фиксированной ширине),
Нет никакого ярлыка строки формата (односимвольные с правилами по умолчанию) для обработки бухгалтерских форматов стиля (вот шпаргалка со строками доступного формата), таким образом, необходимо будет записать более определенный (как ответ Patrick) или собственный метод парсинга.
Требования выравнивания были бы характерны для того, как Вы отображаете их. Я предполагаю, что Вы используете таблицу, в этом случае Вы ограничены тем, какие поддержки HTML, и она не поддерживает бухгалтерское выравнивание стиля как Excel.
Вы могли сделать что-то с помощью изменения метода Patricks. Это обработает форматирование, и выравнивание, принимающее Вас, знают верхнюю границу того, как большой значение Вы имеете дело с:
private static string OutputAsCur(decimal val)
{
string format = " #,##0.00 ; (#,##0.00);Zero";
string frmt = val.ToString(format);
return CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol + frmt.PadLeft(15, ' ');
}
Вот простое приложение в качестве примера для наблюдения его формат:
static void Main(string[] args)
{
decimal d = 155.55m;
Console.WriteLine(OutputAsCur(d));
Console.WriteLine(OutputAsCur(d * -1));
Console.WriteLine(OutputAsCur(1002.32m));
Console.WriteLine(OutputAsCur(1002.32m * -1));
Console.ReadLine();
}
В этом блоге были некоторые различные обрисованные в общих чертах форматы, и этот, казалось, был близко к тому, что Вы искали:
int neg = -10;
int pos = 10;
// C or c (Currency): It represent how many decimal place of zeros to show.
String.Format("{0:C4}", pos); //"$10.0000"
String.Format("{0:C4}", neg); //"($10.0000)"
Это не обрабатывает дополнение (Вам, вероятно, придется зафиксировать это самим), но это действительно имеет надлежащую круглую скобку.