簡體   English   中英

規范化 System.Decimal - 去除尾隨零

[英]Normalize a System.Decimal - strip trailing zeros

我有一種非常緊湊的方法來刪除十進制值中的尾隨零,但我更喜歡一種不涉及字符串往返的方法,就像我目前所做的那樣。 這是我目前的解決方案:

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

所以它有效,但你有更好的方法嗎?

此外,作為次要問題是 decimalValue.ToString() 100% 符合 xs:decimal?

數字存儲為多少 SF 並不重要,重要的是輸出它時會發生什么。

嘗試

// The number of #'s is the number of decimal places you want to display
Console.WriteLine(value.ToString("0.###############");
// Prints 0.01

要回答您的第二個問題, 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);
}

這是一個新的草案想法:

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;
    }
}

這可能只是這樣做。 但它非常粗糙。 需要測試並簡化它。

轉換為double並返回到decimal應該可以工作。

decimal fixDecimal(decimal number) => (decimal)(double)number;

不過,可能存在我不知道的邊緣情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM