我在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。 任何人都有任何想法如何解决这个问题?
答案 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();