Нормализовать System.Decimal - убрать конечные нули - PullRequest
3 голосов
/ 22 августа 2011

У меня есть довольно компактный способ удаления конечных нулей в десятичных значениях, но я бы предпочел способ, который не включает в себя циклическое переворачивание строк, как мой в настоящее время. Это мое текущее решение:

var value = 0.010m;
value = decimal.Parse(value.ToString("G29"));
Console.WriteLine(value); // prints 0.01 (not 0.010)

Так это работает, но есть ли у вас еще лучший способ?

Также второстепенным вопросом является decimalValue.ToString (), который на 100% соответствует xs: decimal?

Ответы [ 3 ]

2 голосов
/ 22 августа 2011

На самом деле не имеет значения, сколько SF хранится число, а скорее, что происходит, когда вы выводите его.

Попробуйте

// The number of #'s is the number of decimal places you want to display
Console.WriteLine(value.ToString("0.###############");
// Prints 0.01
1 голос
/ 22 августа 2011

Чтобы ответить на ваш второй вопрос, System.XmlConvert.ToString(decimal value) на 100% соответствует xs: decimal.

Это должно быть немного быстрее.

public static decimal StripTrailingZeroes(this decimal value)
{
    return decimal.Parse(value.ToString("G29", CultureInfo.InvariantCulture), CultureInfo.InvariantCulture);
}
0 голосов
/ 23 августа 2011

Вот новый черновик идеи:

public static class DecimalEx
{
    public static decimal Fix(this decimal value)
    {
        var x = value;
        var i = 28;
        while (i > 0)
        {
            var t = decimal.Round(x, i);
            if (t != x)
                return x;
            x = t;
            i--;
        }
        return x;
    }
}

Это может просто сделать это. Но это очень грубо. Нужно проверить и упростить его.

...