decimal a = 9300 * (100m / 300);
这样计算出来的结果是:3099.9999999999999999999999997M
要怎样才能让其计算出来的结果是3100?
C# 中也有Math 函数 可以用Math.round()
嗯,现在就是啊。只能这样。但想从根源上去解决这问题。
用浮点数计算都是这样的,你用的是什么语言,看有没有特殊的包装类,精度不丢失的。
C#啊。
decimal本身是精确数,我觉得最主要的问题是因为(100m/300)加了括号了吧,导致其获得了高计算的优先级,而这个值实际上是个无限循环小数,而decimal显然无法表示无限循环,所以只能保留小数点后面的一部分位,然后再乘以前面的9300就会差一点点了。如果把括号去掉,9300*100m/300,就肯定能得到3100
decimal a = 9300 * (convert.toint32(100m) / convert.toint32(300));