截断C#的十进制数字
本文关键字:十进制数字 截断 | 更新日期: 2023-09-27 18:29:49
我有一个十进制变量,其值如下
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
我该如何实现。
没有将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
。
这将保留4位小数并截断其余部分:
a = decimal.Truncate(a*10000)/10000;
b = decimal.Truncate(b*10000)/10000;
c = decimal.Truncate(c*10000)/10000;