如何限制小数位数?

31

5
需要展示吗?还是说要比使用浮点数更进一步地失去精度? - gbn
6个回答

64

11
请注意,默认情况下,C#使用“银行家舍入”方法,这可能不是您想要的。因此,有一个Math.Round(decimal, int, MidpointRounding)的方法重载,可以让您指定要使用的精确舍入方法。例如,TSQL使用“远离零”舍入,因此可能会给出与默认C#舍入不同的值。 - Dr Herbie

15

我假设你的确是想要将其格式化以便于输出:

Console.WriteLine("{0:0.###}", value);

你也可以使用格式说明符string result = 1.23456.ToString("F2", CultureInfo.InvariantCulture); - Matthias Braun

8
要获取小数,请使用Math.Round,并指定第二个参数来指定小数点位数。
decimal d = 54.9700M;    
decimal f = (Math.Round(d, 2)); // 54.97

要获得数字的字符串表示形式,请使用.ToString(),并将小数点指定为N3。其中3是小数点后的位数。
decimal d = 54.9700M;    
string s = number.ToString("N3"); // "54.97"

1
使用Math.Round将其四舍五入到3位小数。

1

限制浮点数的精度是SQL概念。在C#中,Decimal仅表示它将记住分配的精度。您可以在分配之前四舍五入到三位小数。例如:Math.Round()


0

我的回答中包含了响应的部分和一些有趣的观点:

我经常想将变量视为一个属性/字段。因此,我创建了一个扩展方法来解决这个问题:

Tensao只是一个具有相关值的枚举。

    public static class TensaoExtensions {
        public static double TensaoNominal(this Tensao tensao) {
            return Math.Round((double.Parse(EnumMapper.Convert(typeof(Tensao),
                           tensao.ToString()))) * 1000 / Math.Sqrt(3), 3);
        }
    } 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接