【问题标题】:Normalize a System.Decimal - strip trailing zeros规范化 System.Decimal - 去除尾随零
【发布时间】:2011-11-01 02:10:14
【问题描述】:

我有一种非常简洁的方法来删除十进制值中的尾随零,但我更喜欢一种不涉及字符串往返的方法,就像我目前所做的那样。这是我目前的解决方案:

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

它确实有效,但你有更好的方法吗?

另外,作为次要问题的是 decimalValue.ToString() 100% 符合 xs:decimal?

【问题讨论】:

标签: c# format decimal


【解决方案1】:

这个数字存储了多少个 SF 并不重要,重要的是当你输出它时会发生什么。

试试

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

【讨论】:

    【解决方案2】:

    要回答您的第二个问题,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);
    }
    

    【讨论】:

    • @Bent - 抱歉,我无法解决最初的问题 - 我做了一半的尝试来弄清楚 Decimal 的工作原理;它的记录很差,而且看起来修改int[4] 表示可能很棘手。如果它成为问题,我会将其作为扩展方法并在以后考虑对其进行优化;很可能它不是一个很大的性能打击(听起来像过早的优化)。我已经用最快的字符串往返编辑了我的问题。
    • 这只是“我心中的分裂”问题:它不应该将表示更改为字符串来去除尾随的零,所以它让我烦恼,但你是完全正确的,它应该是正确的这是最重要的。
    • 我知道它也会困扰我。看看我的一些字符串操作答案——我讨厌用字符串做事。
    【解决方案3】:

    这是一个新的想法草案:

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

    这可能就是这样做的。但它非常粗糙。需要对其进行测试和简化。

    【讨论】:

      【解决方案4】:

      投射到 double 并返回到 decimal 应该可以工作。

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

      不过,可能有一些我不知道的极端情况。

      【讨论】:

        猜你喜欢
        • 2021-10-15
        • 1970-01-01
        • 2011-03-01
        • 2014-09-02
        • 2020-02-06
        • 1970-01-01
        • 2021-12-04
        • 2011-05-30
        相关资源
        最近更新 更多