【问题标题】:Expression C# with Math.Ceiling带有 Math.Ceiling 的表达式 C#
【发布时间】:2015-03-07 11:59:04
【问题描述】:

嗨,我有数据表,其中显示每 1 箱的最低库存、库存和数量。我想添加一个列来计算我们订购了多少个纸箱。这是我的公式:

dt.Columns["QuantityOrder"].Expression = "(MinimumStock-Stock)/ QuantityPerCarton"; 

因为我想做例如以下操作:如果 MinimumStock = 4 , Stock = 1 和 QuantityPerCarton = 12。我想要 QuantityOrder = 1 即使它是 0。所以我尝试了这个:

dt.Columns["QuantityOrder"].Expression = Math.Ceiling("(MinimumStock-Stock)/ QuantityPerCarton"); 

但它有一个构建错误:

The best overloaded method match for 'System.Math.Ceiling(decimal)' has some invalid arguments  

Argument 1: cannot convert from 'string' to 'decimal'   

我该怎么办?这是一个数据表,用 c# 编写

更新:如果 int 将其舍入为 0,则数据类型为 double

更新 2:库存将永远超过最低库存,因为我使用 sql 过滤了它

【问题讨论】:

  • 您正在尝试获取表达式字符串的上限,而不是在表达式中使用上限函数
  • "(MinimumStock-Stock)/ QuantityPerCarton" 是字符串,不是表达式。
  • 所以我应该这样做吗?"Math.Ceiling(((MinimumStock-Stock) - 1) / QuantitéParCarton)"
  • 您可以在表达式中使用的运算符列表在这里 msdn.microsoft.com/en-us/library/… 但我看不到做天花板的方法
  • 哦,有 IIF 你可以做到这一点

标签: c# .net datatable expression rounding


【解决方案1】:

您可以使用内联 if 运算符和模函数 % 来实现计算

string exp = "IIF(Stock > MinimumStock, 0, ((MinimumStock - (MinimumStock-Stock % QuantityPerCarton))/QuantityPerCarton)+1)"
dt.Columns["QuantityOrder"].Expression = exp

【讨论】:

  • 真的,我会将所有数据返回到一个对象列表中,然后您就可以使用所有的 .net 数学函数
  • 库存永远不会超过最低库存,因为我用 sql 过滤了它
  • 好吧,当我只想四舍五入到天花板时会很复杂
  • 对不起,我误读了您的问题,以为是
  • 我不太明白 (MinimumStock - (MinimumStock-Stock % QuantityPerCarton)/QuantityPerCarton)+1,因为它给了我 4.75
猜你喜欢
  • 2018-12-09
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多