Существует ли средство форматирования дисплея, которое произведет десятичные числа как эти строковые представления в 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 не будет работать со связанным числовым столбцом в сетке.
У вас есть максимальное количество десятичных знаков, которое вам когда-либо понадобится? (В ваших примерах не более 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.#####"));
}
Это довольно легко сделать из коробки:
Decimal YourValue; //just as example
String YourString = YourValue.ToString().TrimEnd('0','.');
, что удалит все завершающие нули из десятичного числа.
Единственное, что вам нужно сделать, это добавить .ToString (). TrimEnd ('0', '.');
к десятичной переменной, чтобы преобразовать Decimal
в a Строка
без нулей в конце, как в примере выше.
В некоторых регионах это должно быть .ToString (). TrimEnd ('0', ',');
(где вместо точки используется запятая, но вы также можете добавить точку и запятая в качестве параметров, чтобы быть уверенным).
(вы также можете добавить оба параметра в качестве параметров)
Я не думаю, что это возможно из коробки, но такой простой метод должен сделать это
public static string TrimDecimal(decimal value)
{
string result = value.ToString(System.Globalization.CultureInfo.InvariantCulture);
if (result.IndexOf('.') == -1)
return result;
return result.TrimEnd('0', '.');
}
Метод расширения:
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