我的公司从事能源行业,我需要想出一种很好的方法来表示计量单位的转换。我已经进行了一些搜索,但还没有找到需要的深度方面的好文章。大多数有关单位转换的信息都假定给定的单位1有一个已知的(硬编码)转换率可以到达单位2,并且它是简单的数学运算(这是我发现的最复杂的示例,仍然没有用)。但是,在现实世界中并非总是如此,对于我们必须处理的事情当然也不是正确的。(很抱歉写了很长时间-我正尝试提供尽可能多的信息!)
棘手的示例1: 某些转换会随时间而变化,例如将$ 5转换为Euros,反之亦然。听起来这与能源无关,但实际上在能源商品市场(想想股票市场)中。
棘手的例子2 :(过于 简单化)某些天然气燃烧得比另一些更热。另外,可以根据气体中的能量(例如Therms)或基于该气体的体积(例如1000立方英尺的MCF)来测量/存储天然气,还有其他可能性(例如作为吨用于质谱)。汽油的一个例子是1加仑的93辛烷无铅汽油比1加仑的93辛烷无铅汽油少。
棘手的示例3: 除了拥有这些度量单位之外,我们还经常需要处理费率,例如$ / Therm或$ / MCF。因此,我们需要某种方式来处理这些费率以及它们与基本单位的关系,因此,如果我们需要从$ / Therm转换为€/ MCF,我们可以并且它使用与从Therm转换为MCF相同的发布费率。
棘手的示例4: 以前,我曾经非常宽松地使用“ 能量 ”一词,有时可能会错误地使用它。从现在开始,这种情况正在改变。所以最后一个曲线球是我们既要处理能源又要处理电源。对于电力,这意味着kWH与kW(尽管是Yahoo Answers,这是一个相当不错的解释)。数据比喻:这就像将下载的总MB数据与Mbps进行比较ISP为您提供的带宽。像数据一样,能量也需要时间来传递。继续进行数据类比,我们可能必须计算一段时间内消耗的平均有效带宽,因此,假设在1分钟内下载了60MB,则“有效”速率将为60 * 8/60 = 8Mbps。这里的“窍门”是,如果我们将Mbps本身存储为一个单位,那么即使它也涉及时间成分,我们也需要某种方法将其直接与MB相关联。幸运的是,从能源到电力的转换(反之亦然)对我们来说是一件非常罕见的事情,因此我们的解决方案应针对所有其他棘手的示例进行优化,并希望也允许这个示例,但不要处理相关的问题。能源到电源是一种选择。
整蛊例如5: 这主要是3 + 4,我们可以同时拥有每千瓦$和$每千瓦时,所以利率同时面对电力和能源。
举个简单的例子: 有些转换非常容易,而这些转换是网络上大多数信息都可以处理的。1000 Wh = 1kWh等。与Therms和Decatherms或kW到MW等相同。在这里我不需要帮助,但请记住,我们约有70%的转换属于此类。
我对如何开始但不确定如何完成的想法:
- 这显然很混乱,因此我建议我们选择一个标准的度量单位来存储每种商品和“使用类型”的所有数据。因此,对于电力,我们的标准能源单位为kWH,我们的标准动力单位为kW。因此,要转换为任何其他能源/功率单位,我们仅需要与标准之间的转换率,而不是每种可能的组合。如果我们需要将MW转换为W,我们总是可以通过将其转换为kW来实现。
- 由于转换率可能取决于特定时间,因此我们必须允许存储与测量相关的时间。我怀疑我们不必担心这些转换率的变化快于每小时一次,甚至可以假设每天一次。
- 由于转换率可能取决于发布的值,因此我们必须允许该值相对于度量存储的能力。我怀疑我们不必担心这些转换率的变化快于每小时一次,甚至可以假设每天一次。
- 解决所有这些问题之后,我期望创建一个仅处理所有单位转换的Web服务。我不是要执行这些转换的SQL,而是可以做一些创造性的缓存,因此我并不是绝对要锤击这些表,但是有时它需要处理用户访问的网站中每页面加载约400个值的转换。我不确定这是否/如何重要。
我不知道应该在什么级别存储从未更改过的转换率与确实发生更改的转换率,以及如何以一种易于使用的方式快速访问这些转换率的方法,一起工作。
关于如何解决这个问题,甚至某些出版的阅读材料可能有帮助的想法?我正在使用SQL Server(即将成为SQL Azure),但这并不重要。正确表示这一点的模式就是我在这里遇到的问题。如果它像英寸和厘米一样简单,那很容易。但是这里存在转换率变化的问题。