我有一个带有以下值的十进制变量
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
我怎样才能实现它。
答案 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.Truncate
和Math.Floor
之间的区别在于负数的处理。 Math.Truncate
从字面上截断十进制数字,而Math.Floor
返回小于输入的最大整数,因此Math.Truncate(-1.2)
将返回-1
而Math.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;