【问题标题】:Set the number of decimal places in data type decimal设置数据类型十进制的小数位数
【发布时间】:2020-07-11 17:47:51
【问题描述】:

我有一个模型,其中包含数据类型为小数的属性。我想确保 getter 方法在每种情况下都返回一个确定的值。

数据类型模型存储非有效小数位数,但似乎没有公开方法或属性来控制它。

以下程序说明了调查结果:

class Program
{
    static void Main(string[] args)
    {
        decimal d1 = decimal.Parse("1200.00");
        Console.WriteLine(d1); // Prints 1200.00
        decimal d2 = decimal.Parse("1200");
        Console.WriteLine(d2); // Prints 1200
        decimal d3 = correctDecimalPlaces(d2);
        Console.WriteLine(d3); // Prints 1200.00
    }
    static decimal correctDecimalPlaces(decimal d)
    {
        return decimal.Parse(d.ToString("0.00"));
    }
}

如何控制十进制数据类型中使用的小数位数?

为了更改十进制值的个数,我将十进制转换为字符串,然后再转换回十进制。你知道更清洁的方法吗?

【问题讨论】:

标签: c# string decimal


【解决方案1】:

0.00m 添加到十进制数虽然违反直觉,但会强制它至少有 2 个小数点。如果您需要确保它正好是 2,您也可以申请 decimal.Round()

    static decimal correctDecimalPlaces(decimal d)
    {
        return decimal.Round(d + 0.00m, 2);
    }

【讨论】:

    【解决方案2】:

    我找到了这种方式(如果返回字符串对你有好处):

    public static class Extensions
    {
        public static string ToStringDecimal(this decimal d, byte decimals)
        {
            var fmt = (decimals>0) ? "0." + new string('0', decimals) : "0";
            return d.ToString(fmt);
        }
    
        public static string ToStringDecimal(this decimal? d, byte decimals)
        {
            if (!d.HasValue) return "";
            return ToStringDecimal(d.Value, decimals);
        }
    }
    

    或者我们这样使用:

     public static decimal? RoundTo2Decimal(decimal? pValue)   
            if (pValue.HasValue)
            {
                if (pValue.Value >= 0)
                {
                    decimal vAluePos = pValue.Value * 100 + 0.5m;
                    return Math.Floor(vAluePos) / 100;
                }
    
                decimal vAlueNeg = Math.Abs(pValue.Value) * 100 + 0.5m;
                return -(Math.Floor(vAlueNeg) / 100);
            }
            return null;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 2019-05-07
      • 1970-01-01
      • 2012-12-07
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多