Отформатируйте десятичное число с четырьмя цифрами, за исключением случаев, когда эти цифры равны нулю - PullRequest
0 голосов
/ 26 июня 2018

У нас есть конкретная проблема форматирования, которую мы хотели бы решить наиболее эффективным способом.

Мы должны отформатировать десятичное число до четырех цифр после десятичной точки, ЗА ИСКЛЮЧЕНИЕМ, когда нет десятичных знаков, потому что в этом случае десятичное число должно быть отформатировано до двух цифр после десятичной точки

Я приведу несколько примеров для объяснения:

1,234 должно быть напечатано как 1,234 (все цифры) в то время как 1.000 должно быть напечатано как 1.00 (ограничено двумя цифрами) а также 1,500 должно быть напечатано как 1,50 (ограничено двумя цифрами)

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

Я полагаю, что в .NET нет простого способа сделать это? Если так, я подумал, что мог бы использовать функцию .ToString(), чтобы превратить ее в строку и разобрать все после десятичной точки? Или у кого-нибудь есть более эффективные идеи?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Вызов метода decimal.ToString() со следующим спецификатором формата должен привести к выводу от 2 до 4 десятичных знаков:

decimal d = 1.234m;
string output = d.ToString("0.00##");

Дополнительную информацию о спецификаторах числового формата см. В MSDN.

Строки стандартного числового формата: https://msdn.microsoft.com/en-us/library/0b22a4x2(v=vs.110).aspx

Пользовательские строки числового формата: https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings

0 голосов
/ 26 июня 2018

А как насчет этого?

    string SetDecimals(decimal val)
    {
        var decimalStr = val.ToString().Split(new string[] { System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator }, StringSplitOptions.None)[1];
        if (decimalStr.Length == 4 && !decimalStr.EndsWith("00"))
            return string.Format("{0:N4}", val);
        else if(decimalStr.Length == 3 && !decimalStr.EndsWith("0"))
            return string.Format("{0:N3}", val);
        else
            return string.Format("{0:N2}", val);
    }
...