Формат строки бухгалтерского стиля в ASP.NET - PullRequest
5 голосов
/ 30 марта 2009

Я хотел бы знать, как проще всего отформатировать строку в качестве стиля учета. Я знаю, как форматировать как валюту, используя {0: c}, но есть некоторые различия в стиле учета, например, все знаки доллара будут располагаться так же, как и все десятичные точки, а отрицательные значения выражаются в скобках, а не "-" знак минус. Вы можете найти хороший пример того, как я хотел бы, чтобы в Excel, если вы отформатируете ячейки как «бухгалтерские» с двумя десятичными знаками.

Ответы [ 6 ]

4 голосов
/ 30 марта 2009

Игнорируя ваши требования к выравниванию, вы можете использовать

number.ToString("€#,##0.00;(€#,##0.00);Zero")

заключить в скобки отрицательные числа.

Чтобы выровнять числа, вам нужно будет отформатировать их без символа валюты и дополнить форматированные числа пробелами. Использование шрифта фиксированной ширины облегчит вам эту работу.

EDIT:

Кажется, String.Format твой друг:

String.Format("{0,15:#,##0.00 ;(#,##0.00);-   }", number)

где 15 - общая ширина вывода, и вам нужно добавить этот текст к символу вашей валюты. (Опять же, это выравнивается только с фиксированной шириной)

3 голосов
/ 30 марта 2009

Нет ярлыка строки формата (односимвольные с правилами по умолчанию) для обработки форматов стилей учета ( здесь есть шпаргалка с доступными строками формата ), поэтому вам придется написать более конкретный один (как ответ Патрика) или ваш собственный метод синтаксического анализа.

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

1 голос
/ 30 марта 2009

Вы можете сделать что-нибудь, используя вариант метода Патрика. Это будет обрабатывать форматирование и выравнивание, если вы знаете верхнюю границу величины, с которой вы имеете дело:

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();
     }
1 голос
/ 30 марта 2009

В этом блоге было выделено несколько различных форматов, и этот, казалось, был близок к тому, что вы искали:

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)"

Он не обрабатывает отступы (возможно, вам придется это исправить самостоятельно), но в нем есть соответствующие скобки.

0 голосов
/ 24 мая 2017

Я выполнил эти шаги для применения формата «Бухгалтерский учет».

  • В новой книге в Excel выберите ячейку.
  • Вставить данные (т.е. любое число; для этого примера добавить 80000) .
  • Выберите (учетный) числовой формат, как показано на скриншоте # 1:

Снимок экрана № 1:

Screenshot 1

  • Выберите «Больше числовых форматов».
  • Выберите «Пользовательский».
  • Выберите любую из предопределенных формул (см. Скриншот № 2) .

Снимок экрана № 2:

Screenshot 2

В моем случае это желаемый формат для этого номера.


Отрицательная сторона заключается в том, что при выборе ячейки с примененным к ней форматом вы не увидите выбранный (Бухгалтерский учет) "в формате чисел DropDownList".

0 голосов
/ 10 февраля 2014

Вы можете использовать строку формата для String.Format, чтобы получить то, что вы пытаетесь достичь. Единственная хитрость заключается в том, что положительные числа, поскольку они не будут иметь закрывающей скобки, должны будут содержать пробел в конце, если они будут выровнены с любыми отрицательными числами, которые будут в столбце. Хитрость заключается в том, чтобы вставить это пространство в строку так, чтобы HTML не игнорировал. Я просто использую сущность HTML & nbsp; что указывает на неразрывный пробел в HTML.

Вот пример кода. Сначала в aspx.

<table>
...
    <tr>
        <th scope="row" colspan="2">Total Revenue</th>
        <td class="numeric total"><asp:Label runat="server" ID="TotalRevenueLabel" /></td>
    </tr>
...
</table>

Теперь, код позади.

public const string kMoneyFormat = "#,#.00'&nbsp;';(#,#.00);'-.--&nbsp;'";

public void DataBind()
{
    using (FinancialDataContext sql = new FinancialDataContext())
    {
        var periodQuery = from m in sql.Forecasts()
                          select m;
        ForecastsResult periodData = periodQuery.Single();
        decimal totalRevenue = period.Data.income_actual.Value + periodData.other_income.Value;
        TotalRevenueLabel.Text = totalRevenue.ToString(kMoneyFormat);
    }
}
...