首页 新闻 搜索 专区 学院

问个关于decimal类型计算的问题

0
[待解决问题]

decimal a = 9300 * (100m / 300);

这样计算出来的结果是:3099.9999999999999999999999997M

要怎样才能让其计算出来的结果是3100?

天华的主页 天华 | 菜鸟二级 | 园豆:202
提问于:2014-01-22 21:30
< >
分享
所有回答(4)
0

C# 中也有Math 函数 可以用Math.round()

Zery | 园豆:6069 (大侠五级) | 2014-01-22 21:54

嗯,现在就是啊。只能这样。但想从根源上去解决这问题。

支持(0) 反对(0) 天华 | 园豆:202 (菜鸟二级) | 2014-01-22 22:02
0

用浮点数计算都是这样的,你用的是什么语言,看有没有特殊的包装类,精度不丢失的。

angelshelter | 园豆:9676 (大侠五级) | 2014-01-22 21:59

C#啊。

支持(0) 反对(0) 天华 | 园豆:202 (菜鸟二级) | 2014-01-22 22:01
0

decimal本身是精确数,我觉得最主要的问题是因为(100m/300)加了括号了吧,导致其获得了高计算的优先级,而这个值实际上是个无限循环小数,而decimal显然无法表示无限循环,所以只能保留小数点后面的一部分位,然后再乘以前面的9300就会差一点点了。如果把括号去掉,9300*100m/300,就肯定能得到3100

ocean | 园豆:824 (小虾三级) | 2014-01-22 22:05
0

decimal a = 9300 * (convert.toint32(100m) / convert.toint32(300));

YoMe | 园豆:545 (小虾三级) | 2014-01-23 09:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册