0

我在使用 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。任何人都知道我该如何解决这个问题?

4

3 回答 3

1

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

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

于 2014-05-21T09:10:23.840 回答
1

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

 Expression ex = new Expression("[a1] + [a2]");
 ex.Parameters["a1"] = 0.5m;
 ex.Parameters["a2"] = 0.555m;
 object result = ex.Evaluate();
于 2015-08-07T09:06:47.507 回答
0

不是最好的解决方案..而是一个解决方案。

result.ToString(); 

会给我“正确”的号码。通过将其四舍五入为 3 个分数,它将产生正确的结果。

于 2014-05-21T09:00:35.233 回答