去掉C# decimal 类型的数据小数点后的无效0
一、前言
C# 中decimal类型运算时可能会导致一种情况:
明明运算结果是整数,偏偏输出之后后面跟了一堆无效的零
例如:2000.0000000000000000000000M
或者:684684.16464000000000000000M
那么这个问题该如何解决呢?
二、原因
decimal类型为十进制数据类型,精度非常高,通常用来存储金钱有关的数据。
当使用decimal数据类型进行运算时,运算结果的精度由运算项决定。
精度经过乘法被扩大了.
例如:
static void Main(string[] args)
{
decimal a = 20.0m;
Console.WriteLine(a);
decimal b = 20.0m;
decimal c = 30.0m;
decimal d = c*((a * a + b * b)/12);
Console.WriteLine(d);
Console.ReadKey();
}
当你以为运算结果是2000.00时,结果就出乎你的意料~
c=2000.0000000000000000000000000m
三、解决办法
方法一:将结果强转成Double类型,然后再强转回decimal
如果你必须要使用decimal数据类型,就用double类型作为中间变量,转换一下就可以把后面多余的、无效的0给去掉了
static void Main(string[] args)
{
decimal a = 20.0m;
Console.WriteLine(a);
decimal b = 21.375m;
decimal c = 30.0m;
decimal d = c*((a * a + b * b)/12);
double e = (double)d;
Console.WriteLine((decimal)e);
Console.ReadKey();
}
这样输出的结果:2142.2265625,后面就没有多余的0了
方法二:decimal.Round()方法指定保留小数位数
使用关键字decimal带的静态方法Round(想要保留的decimal,保留的小数点后位数)
这种方法会进行四舍五入,如果对数据要求非常严格的话不要轻易使用
static void Main(string[] args)
{
decimal a = 21.54684640000000m;
decimal b = decimal.Round(a, 5);
Console.WriteLine(a);
Console.WriteLine(b);
Console.ReadKey();
}
输出结果b=21.54685
方法三:ToString()转换成字符串进行截取
在网上随便找了一个,自己去看吧
点我!!!查看ToString()操作
原创内容,如果对你有帮助,请点赞~
原创内容,如果对你有帮助,请点赞~
原创内容,如果对你有帮助,请点赞~