截断C#的十进制数字

时间:2014-11-10 15:41:05

标签: c#

我有一个带有以下值的十进制变量

a = 99.9999
b = 88.423766
c = 11.896589

这里我试图用4个小数点进行转换。

我用过

a = Math.Round(Convert.ToDecimal(a), 4);
b = Math.Round(Convert.ToDecimal(b), 4);
c = Math.Round(Convert.ToDecimal(c), 4);

但是我得到像

这样的值
a = 100
b = 88.4238
c = 11.8966

虽然首选值没有四舍五入,但

a = 99.9999
b = 88.4237
c = 11.8965

我怎样才能实现它。

2 个答案:

答案 0 :(得分:3)

没有内置函数可以将decimal截断到N个小数位,但它非常简单:

a = Math.Truncate(a * 10000m) / 10000m;

或作为辅助函数:

public decimal Truncate(decimal d, int n)
{
    // calculate 10^n
    decimal t = (decimal)Math.Pow(10.0,n);

    return Math.Truncate(d * t) / t;
}

或作为扩展方法:

public decimal Truncate(this decimal d, int n)
{
    // calculate 10^n
    decimal t = (decimal)Math.Pow(10.0,n);

    return Math.Truncate(d * t) / t;
}

请注意,Math.TruncateMath.Floor之间的区别在于负数的处理。 Math.Truncate从字面上截断十进制数字,而Math.Floor返回小于输入的最大整数,因此Math.Truncate(-1.2)将返回-1Math.Floor(-1.2) }}将返回-2

答案 1 :(得分:1)

这将保留4位小数并截断其余小数:

a = decimal.Truncate(a*10000)/10000;
b = decimal.Truncate(b*10000)/10000;
c = decimal.Truncate(c*10000)/10000;