【问题标题】:NCalc precision problemsNCalc 精度问题
【发布时间】:2015-08-07 17:06:47
【问题描述】:

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

【问题讨论】:

    标签: c# ncalc


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        result.ToString(); 
        

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

        【讨论】:

          猜你喜欢
          • 2013-03-05
          • 1970-01-01
          • 2021-07-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-18
          相关资源
          最近更新 更多