Лучший способ отобразить десятичное число без конечных нулей

Существует ли средство форматирования дисплея, которое произведет десятичные числа как эти строковые представления в c#, не делая никакого округления?

// decimal -> string

20 -> 20
20.00 -> 20
20.5 -> 20.5
20.5000 -> 20.5
20.125 -> 20.125
20.12500 -> 20.125
0.000 -> 0

{0.#} будет вокруг, и использующий некоторую функцию типа Trim не будет работать со связанным числовым столбцом в сетке.

97
задан abatishchev 3 January 2017 в 22:21
поделиться

4 ответа

У вас есть максимальное количество десятичных знаков, которое вам когда-либо понадобится? (В ваших примерах не более 5).

Если это так, я думаю, что форматирование с помощью «0. #####» будет делать то, что вы хотите.

    static void Main(string[] args)
    {
        var dList = new decimal[] { 20, 20.00m, 20.5m, 20.5000m, 20.125m, 20.12500m, 0.000m };

        foreach (var d in dList)
            Console.WriteLine(d.ToString("0.#####"));
    }
136
ответ дан 24 November 2019 в 05:25
поделиться

Это довольно легко сделать из коробки:

Decimal YourValue; //just as example   
String YourString = YourValue.ToString().TrimEnd('0','.');

, что удалит все завершающие нули из десятичного числа.

Единственное, что вам нужно сделать, это добавить .ToString (). TrimEnd ('0', '.'); к десятичной переменной, чтобы преобразовать Decimal в a Строка без нулей в конце, как в примере выше.

В некоторых регионах это должно быть .ToString (). TrimEnd ('0', ','); (где вместо точки используется запятая, но вы также можете добавить точку и запятая в качестве параметров, чтобы быть уверенным).

(вы также можете добавить оба параметра в качестве параметров)

2
ответ дан 24 November 2019 в 05:25
поделиться

Я не думаю, что это возможно из коробки, но такой простой метод должен сделать это

public static string TrimDecimal(decimal value)
{
    string result = value.ToString(System.Globalization.CultureInfo.InvariantCulture);
    if (result.IndexOf('.') == -1)
        return result;

    return result.TrimEnd('0', '.');
}
1
ответ дан 24 November 2019 в 05:25
поделиться

Метод расширения:

public static class Extensions
{
    public static string TrimDouble(this string temp)
    {
        var value = temp.IndexOf('.') == -1 ? temp : temp.TrimEnd('.', '0');
        return value == string.Empty ? "0" : value;
    }
}

Пример кода:

double[] dvalues = {20, 20.00, 20.5, 20.5000, 20.125, 20.125000, 0.000};
foreach (var value in dvalues)
    Console.WriteLine(string.Format("{0} --> {1}", value, value.ToString().TrimDouble()));

Console.WriteLine("==================");

string[] svalues = {"20", "20.00", "20.5", "20.5000", "20.125", "20.125000", "0.000"};
foreach (var value in svalues)
    Console.WriteLine(string.Format("{0} --> {1}", value, value.TrimDouble()));

Выход:

20 --> 20
20 --> 20
20,5 --> 20,5
20,5 --> 20,5
20,125 --> 20,125
20,125 --> 20,125
0 --> 0
==================
20 --> 20
20.00 --> 2
20.5 --> 20.5
20.5000 --> 20.5
20.125 --> 20.125
20.125000 --> 20.125
0.000 --> 0
4
ответ дан 24 November 2019 в 05:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: