【问题标题】:How to divide a decimal number in C#?如何在 C# 中除以十进制数?
【发布时间】:2019-12-26 07:27:41
【问题描述】:

我正在使用 C# 为一家医疗商店开发 POS 应用程序。根据商店要求,他们有两种类型的产品。

  1. 没有变体的产品(没有子产品,即一瓶悬浮液或婴儿食品)。
  2. 有变化的产品(有子产品,即一包药片-> 有 3 条 -> 每条包含 10 片)

对于有变体的产品,我有变体标准(每个产品在每个包装中都有特定数量的条带,每个条带都有特定数量的药片)。我用水平管理它们。即 A 级(用于父产品)、B 级(用于子项目,例如一包内的条)、C 级(对于一条内的单个片剂)。为了加快售罄操作,我管理了具有此类变体的产品。

根据客户行为,我想管理销售操作,如果客户购买一包药片并且该包包含 3 条并且每条进一步包含 10 片,我想在我的数据库中完全捕获此库存减少.

为此,我的 SQLServer 中有一个单独的表。该表包含两种产品(有和没有变化)。该表还包含一个名为 IsParent 的单独字段,用于跟踪产品。 IsParent 字段为没有变化的产品存储 0,为有变化的产品存储 1。该表还包含基于变体的产品的每个级别的单独字段和每个级别的单独数量字段。

假设我有 10 包 XYZ 片剂,B 级标准为 3(每包 3 条),C 级标准为 10(每条 10 片),那么我现有的库存将是这样的:

10 X 3 = 30 条

30 X 10 = 300 片

现在,如果客户从这 10 包中购买了一条,那么我如何从整个茎中减去 1 条,即 30 条?我怎样才能从整个茎中减去这 10 片(1 条),即 300 片?

到目前为止,我正在做以下手动减法:

对于 B 级(单条或两条,每条有 10 片)

decimal levelB = purchaseQuantity / levelBStandard;
decimal levelB_Qty = Math.Round((Decimal)levelB, 1);

购买数量是客户购买的数量。此数量除以 B 级标准,即 3。如果客户购买 2 条,则 2/3 = 0.66,如果客户购买 1 条,则 1/3 = 0.33。如果另一个客户从同一产品中购买一个或两个条带,那么由于小数点的原因,经过几次交易后,库存量就会变得很棘手。

如果客户购买的平板电脑少于 10 片,我也会做同样的操作,这对我来说非常棘手。我需要一些方法来管理这种库存减少,以便如果在一次销售操作中从30 strips 售罄 2 条,那么剩余库存数量将为29.34 or 29.3。后来,在同一产品的另一个销售操作中,如果另一个客户购买了单个条带,那么条带的库存量应该变为29而不是29.01,因为这个0.1给我带来了麻烦。

我也会以同样的方式管理平板电脑的库存减少。我希望有人可以帮助我提供一个简单但可靠的解决方案。任何帮助将不胜感激。

【问题讨论】:

  • 让您的库存余额保持在最低stock keeping unit。在您的情况下,它是 striptablets 如果您确实需要通过 tablet 出售?并且您需要在packstriptablet 之间保留一个转换表
  • 我同意@Squirrel,所有库存系统都将根据项目维护单位转换表,并且必须在购买单位和销售单位之间进行一次转换。

标签: c# sql-server-2008 pos


【解决方案1】:

库存管理系统通常通过从“单元”(即您保留库存的东西)中抽象出“产品”(即您销售的东西)的概念来处理这类问题。

在您的情况下,您将按片剂或条带的单位管理库存(无论您的库存的适用原子表示是什么),然后创建与这些库存单位相关的产品。

产品可能与库存单位具有 1:1 的关系(例如产品“1 条 XYZ(10 片)”= 库存中的 1 x 条),或者产品可能是捆绑包(例如产品“一包 XYZ(30 片)“= 3 x 条库存)。

您的库存成本计算使用您选择的任何方法(先进先出、加权平均等)进行管理,并且您的每个产品都有自己的(或多个)价格点。

当产品“一包 XYZ(30 片)”售出时,您的库存减少 3 倍 “条形”单位(并计算相关的销售商品成本)并且您的收入会随着“XYZ 包装(30 片)”产品的售价而增加。

【讨论】:

    【解决方案2】:

    我尝试在 C# 中除以十进制数,然后得到输出.. 如下所示

    namespace ConsoleApp1
    {
       class Program
       {
          static void Main(String[] args)
          {
            Decimal dividend = 1234.0m;
            Decimal divisor = 21.1m;`
            for(int ctr = 0; ctr <= 10; ctr++)
            {
               Console.WriteLine("{0:N1} / {1:N1} = {2:N4}", dividend, divisor, Decimal.Divide(dividend, divisor));
               dividend += .1m;
            }
            Console.ReadKey();
          }
       }
    }
    

    我得到的输出如下所示:-

    1,234.0 / 21.1 = 58.4834
    1,234.1 / 21.1 = 58.4882
    1,234.2 / 21.1 = 58.4929
    1,234.3 / 21.1 = 58.4976
    1,234.4 / 21.1 = 58.5024
    1,234.5 / 21.1 = 58.5071
    1,234.6 / 21.1 = 58.5118
    1,234.7 / 21.1 = 58.5166
    1,234.8 / 21.1 = 58.5213
    1,234.9 / 21.1 = 58.5261
    1,235.0 / 21.1 = 58.5308
    

    我认为这对你有用... 谢谢……

    【讨论】:

      【解决方案3】:

      编辑:如果单位不是加权单位,我的建议是避免使用小数,并按以下方式管理其余部分

      考虑到工作的复杂性和您已经为此付出的努力,我建议您对架构进行少量更改。

      也就是说,您应该将您的“变体产品”分为“包装”和“分离”两种不同类型,并以不同方式管理它们。

      例如,现在有一个变体名称为“Panadol”的产品。 1 包 panadol (Parant Product) 包含 60 片 (Child Product)。

      您有一个产品“panadol”10 包和 30 片的库存,您会将它们与相同的批号相关联。

      现在您的库存应该如下所示

      //Inventory table 
      
      | InventoryID | Batch |  ProductID  |
      |    1        | 001   |    1        | 
      
      // Stock table 
      | StockID | InventoryID  |   Packed Stock | Detached Stock |  
      |    1    |      1       |       10       |        30      |
      

      第一次交易1包,你需要检查库存然后进行交易你的桌子看起来像这样

      // Stock table 
      | StockID | InventoryID  |   Packed Stock | Detached Stock |  
      |    1    |      1       |       9        |        30      |   
      

      第二次交易20片,你需要检查是否有库存然后进行交易你的桌子会是这样的

      // Stock table
      | StockID | InventoryID  |   Packed Stock | Detached Stock |  
      |    1    |      1       |       9        |        10      | 
      

      第三笔交易65粒, 首先,您将检查独立库存,即不够。 然后你会检查包装好的库存,即足够 然后必须有 META DATA 表,该表将记录 1 包 panadol 包含 60 片。 您现在将打包库存移动到分离库存。 你的桌子必须是这样的

         // Stock table
          | StockID | InventoryID  |   Packed Stock | Detached Stock |  
          |    1    |      1       |       8        |        70      |  
      

      现在您将进行交易,您的表格将如下所示

      // Stock table
      | StockID | InventoryID  |   Packed Stock | Detached Stock |  
      |    1    |      1       |       8        |        5       |
      

      【讨论】:

      • 我同意你的解决方案!
      • @Noor 如果它适合您,Mark 就是一个答案,因此它也可以帮助社区中的其他人
      猜你喜欢
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2023-03-31
      • 2010-09-18
      • 1970-01-01
      • 2015-12-03
      • 2014-09-18
      • 1970-01-01
      相关资源
      最近更新 更多