终极办法:去掉C# decimal 类型的数据小数点后的无效0

去掉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()操作

原创内容,如果对你有帮助,请点赞~
原创内容,如果对你有帮助,请点赞~
原创内容,如果对你有帮助,请点赞~

    原文作者:强子无怒
    原文地址: https://blog.csdn.net/qq_25986069/article/details/105016015
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞