NCalc精度问题

时间:2014-05-21 08:30:49

标签: c# ncalc

我在NCalc遇到了一些问题。 我的问题很简单。只需添加0.5和0.5555。 预期结果是1.0555。这需要舍入到3个分数。 1.056

float和double不应该在5位数字处引起任何精度问题。但NCalc确实如此。

Expression ex = new Expression("0.5 + 0.5555");
object result = ex.Evaluate();

result  1.0554999999999999  object {double}

这将向下舍入而不是向上。即使错误是0.0000000 ~~~~ 1。 任何人都有任何想法如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

NCalc将这两个数字添加为System.Double值,因此结果(也是System.Double)是正确的。

如果NCalc不允许在两个System.Decimal值上强制执行此操作,那么您可能应该寻找另一个库。

答案 1 :(得分:0)

不是最好的解决方案..但是解决方案。

result.ToString(); 

会给我"正确"回来了。通过将其四舍五入到3个分数,它将产生正确的结果。

答案 2 :(得分:0)

强制NCalc通过使用m传递参数来使用小数:

 Expression ex = new Expression("[a1] + [a2]");
 ex.Parameters["a1"] = 0.5m;
 ex.Parameters["a2"] = 0.555m;
 object result = ex.Evaluate();