标签: units-of-measurement

SQL Server单元问题

这可能是一个非常愚蠢的问题,但......

Geography.STLength返回哪些单位?在MSDN官方页面并没有说明返回单位什么,这个博客条目在这里说STLength() returns a float indicating the length of the instance in units.是的,这是对的,它说它以单位返回.

任何人都可以了解STLength返回的单位吗?脚?米?寸?救命!

sql t-sql sql-server gis units-of-measurement

6
推荐指数
1
解决办法
3207
查看次数

为什么我不能将单位的参数传递给F#类型?

假设我已经定义了一个度量单位:

[<Measure>] type Blob

我想要一个类型,以每秒Blobs的值作为构造函数参数:

type Something(flowRate:double<Blob/s>) = ...

F#对此抛出一个摇摆不定 - "double不期望任何类型的参数,但这里给出了1个类型的参数"

我理解这个消息.我曾经认为我试图做的很明显,但我承认语法可能是错误的.问题是,我如何在代码中表达这种关系?

f# constructor units-of-measurement

6
推荐指数
1
解决办法
215
查看次数

保留用于编程的计算单位

我想知道是否有任何甜言蜜语为"英尺"与"英寸"或"厘米"等提供某种抽象.我正在考虑在Java中做类似以下的事情:

u(56).feet() + u(26).inches()
Run Code Online (Sandbox Code Playgroud)

并能够得到类似的东西

结果为17.7292米.

一种可能的方法是,在创建新值时,立即将其转换为"基础"单位,如米或其他东西,以便您可以轻松添加它们.

但是,我宁愿有能力保存单位,所以就像这样

u(799.95555).feet() - u(76).feet() 
Run Code Online (Sandbox Code Playgroud)

回报

723.95555 feet
Run Code Online (Sandbox Code Playgroud)

并不是

243.826452 meters - 23.1648 meters = 220.661652 meters

//220.661652 meters to feet returns 723.955551 feet 
Run Code Online (Sandbox Code Playgroud)

既然这个问题看起来很普遍,那么是否存在任何框架甚至是一种优雅处理这种问题的编程语言?

我想我可以在我的方法中添加单位,将匹配单位+-*/添加到一起,只在需要时进行转换以便[加/减/乘/除],这对于加法和减法非常有用:

//A
{
    this.inches = 36.2;
    this.meters = 1;
}

//total length is 1.91948 m
Run Code Online (Sandbox Code Playgroud)

如果我用值添加到对象B

//B
{
    this.inches = 0.8;
    this.meters = 2;
}

//total length is 2.02032 m
Run Code Online (Sandbox Code Playgroud)

我得到一个新的对象

{
    this.inches = 37;
    this.meters = 3;
}

//total length is 3.9398 meters
Run Code Online (Sandbox Code Playgroud)

这真是太棒了,每当我想要没问题时我都可以转换它.但是乘法等操作会失败......

//A * …
Run Code Online (Sandbox Code Playgroud)

naming-conventions units-of-measurement

6
推荐指数
1
解决办法
768
查看次数

boost-units - 使用无量纲类型的任意系统

我试图用这样的boost-units制作一个带尺寸的矢量类,

//vector will be constructed vec<si::length> v(10, 1.0*si::metre);
template<typename dimension>
class vec
{
  public:
  //constructor setting all values to q.
  vec(const size_t, const boost::units::quantity<dimension> q)
  //etc
}
Run Code Online (Sandbox Code Playgroud)

这一切工作正常,除了operator*=operator/=那些元素方式乘法和除法.由于这些不会改变维度,因此只有在乘以/除以无量纲数量时才有意义:我正在努力寻找未锁定到特定系统的任意无量纲数量(例如si或cgs单位).

我想要的东西,

  /** Multiply a dimensionless vector. */
  vec<dimension>& 
  operator*=(const vec<boost::units::dimensionless_type>& b);
Run Code Online (Sandbox Code Playgroud)

或许是一些元编程魔术(我注意到boost :: units :: is_dimensionless存在,但我不知道如何使用它,因为我不熟悉一般的元编程技术)

  template<typename dimension>
  template<typename a_dimensionless_type>
  vec<dimension>& 
  vec<dimension>::operator*=(const vec<a_dimensionless_type>& b){
    //some compile time check to make sure that a_dimensionless_type is actually dimensionless?
    //the rest of the function
  }
Run Code Online (Sandbox Code Playgroud)

我想要以下示例进行编译

  vec<si::dimensionless> d(10, 2.0);
  vec<si::length>  l(10, …
Run Code Online (Sandbox Code Playgroud)

c++ boost metaprogramming units-of-measurement

6
推荐指数
1
解决办法
1237
查看次数

使用类型级计算时键入推断/类型检查失败

我在使用metascala中的度量单位功能时遇到了问题,该功能在Units.scala文件中定义.

对于本问题的其余部分,我将使用简化方案,只有一种单位类型,长度.

所以现实中的类型看起来像

Quantity[_1, _0, _0, _0, _0, _0, _0] 
          ^   ^   ^   ^   ^   ^   ^
          |   |   |   |   |   |   |
          | Mass  | Crncy.|  Mol  |
       Length   Time    Temp. Lum.Intensity
Run Code Online (Sandbox Code Playgroud)

这足以证明问题:

Quantity[_1]
          ^
          |
       Length
Run Code Online (Sandbox Code Playgroud)

一旦需要推断出类型,麻烦就开始了.

考虑这个例子(也看看UnitsTest.scala中的代码):

val length: Quantity[_1] = m(5)
val area:   Quantity[_2] = length * length // (1) Works
val dist:   Quantity[_1] = area / length   // (2) Doesn't work!
Run Code Online (Sandbox Code Playgroud)

我在最后一行收到错误说:

type mismatch;
  found : …
Run Code Online (Sandbox Code Playgroud)

generics alias types scala units-of-measurement

6
推荐指数
1
解决办法
181
查看次数

有没有理由不使用单位执行类型?

从概念上讲,在我看来,使用基于单位强制执行的类型(Meters,Seconds,Kilograms)会有很大的好处(额外检查传递args,摆脱变量中的单位名称等)但我没有遇到过多少代码哪个.我见过的代码确实使用了自定义类型.

我看到boost有一个单元库(boost :: units就够了)然而,我没有看到它被广泛使用的广泛使用的证据(在基本的谷歌搜索中).

有这么好的理由吗?

这些似乎意味着必须有某种原因这种做法没有像我期望的那样被广泛采用.也许比某些原因值得更麻烦?

所以我问:

有没有理由不使用单位执行类型?特别是有理由不使用boost :: units吗?

c++ boost types units-of-measurement boost-units

6
推荐指数
1
解决办法
530
查看次数

owl和rdf中的计量单位

我正在创建材料及其物理属性的链接数据,而我在为某些属性设置单位时遇到问题.我个人的材料:AlMg3有一些机械性能,如:

:AlMg3 prop:hasTensileStrength "300" .
:AlMg3 prop:hasYieldStrength   "2" .
:alMg3 prop:hasDensity         "2200" .
Run Code Online (Sandbox Code Playgroud)

如何为这些值设置单位?我的第一个想法是创建新的数据类型,例如:

unit:megaPascal rdf:type   rdfs:datatype ;
                rdfs:label "MPa" .

unit:Pascal rdf:type   rdfs:datatype ;
                rdfs:label "Pa" .
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它们:

:AlMg3 prop:hasTensileStrength "300"^^unit:megaPascal .
:AlMg3 prop:hasYieldStrength   "2"^^unit:Pascal .
Run Code Online (Sandbox Code Playgroud)

然后我想把这些单位联系起来:

unit:megaPascal prop:hasBaseUnit   unit:Pascal .
unit:pascal     prop:hasBaseSIUnit unit:kilogramPerMeterSecondSquared .
Run Code Online (Sandbox Code Playgroud)

这可能吗?单位是数据类型,我不能在它们之间放置数据类型属性,除了注释属性?是否有可能使这些单位个体(甚至是类)并使用它们之后的数据类型?

我看到了用于QUDT(数量,单位,尺寸和数据类型)的OWL本体,但我打算尝试创建一些更简单的东西.

rdf semantic-web owl units-of-measurement linked-data

6
推荐指数
1
解决办法
1411
查看次数

F#无序集合类型表示资源和成本

为了练习一点F#,我正在建立一个简单的游戏.游戏涉及resources玩家可以花费.有3种资源.游戏中的项目和动作具有关联cost,可以组合任意数量的这些资源的数量(或者没有,用于自由行动).我开始实现这一点很多:在F#中创建一个包含多个浮点数测量单位的列表

[<Measure>] type gold
[<Measure>] type wood
[<Measure>] type stone

type Resource =
    | Gold of int<gold> 
    | Wood of int<wood>
    | Stone of int<stone>
Run Code Online (Sandbox Code Playgroud)

现在我需要一个集合数据类型来表示一个cost.我希望它:

  • 包含Resources.理想情况下,它将被限制为每种类型不超过1个资源,但我可以不用安全.

  • 无序.理想情况下(1<gold>, 2<wood>)需要平等(2<wood>, 1<gold>)而不重新定义类型的相等性.

  • 可以轻松地与另一个相同类型的集合(动作可能有可选成本,这将加上正常成本)和可减少(从玩家的资源池).

什么是一个很好的F#集合类型呢?我意识到没有多少是无序的.我在看,Set<'T>但"基于二叉树"部分让我有点困惑,我不确定它是否适合我的需要.

你怎么看 ?我错过了设计中明显的东西吗?

collections f# types units-of-measurement

6
推荐指数
1
解决办法
192
查看次数

Django项目中不同测量系统的概念

我想在我的Django项目中实现不同的测量系统,以便用户可以选择他们想要使用公制或英制单位.但是,我不知道这样做的正确方法是什么.

目前我的模型没有测量单位感知字段(它们是整数/十进制字段),我希望我不必直接更改字段.

由于我当前的数据库值已经表示度量值,我计划保持这种方式,这意味着我将不得不处理用户输入/值输出转换.Pint似乎是一个很好的图书馆.

如果没有在应用程序中编辑字段,但是使用注册模式或其他内容,这是否可行?我想要实现的是这样的:

  1. 我定义了一个包含不同测量类型和可能值的数据结构,例如长度:米,英尺; 重量:公斤,磅等
  2. 我在每个app目录中添加一个新文件"measurements.py"或类似的东西,其中包含保存测量值的字段.在这个字段中,我可以定义哪些是精确的测量字段以及它们的类型,例如fields = {mymodelfield:length,myothermodelfield:weight}等.
  3. 可以在设置文件中设置一些默认设置并在app文件中覆盖,例如每个测量的默认单位(存储在数据库中的单位).
  4. 用户为每种测量类型设置他的偏好.每个测量类型都有默认单位,如前一点所述.在偏好/默认(存储)单元不匹配的情况下转换用户输入的逻辑是必需的.绑定表单还应该能够将字段值从默认值转换回用户首选单位.

这种解决方案可以更容易地将其插入现有应用程序,因为在应用程序中不会直接更改任何字段和表单.使用注册模式的基本示例会很有帮助.

欢迎提供任何相关信息,包括在非Django项目中如何完成此操作的一般概念和模式.

python django units-of-measurement unit-conversion

6
推荐指数
1
解决办法
1074
查看次数

如何在Pint中定义和使用百分比

我目前正在使用Pint来处理单位和单位转换.例如,这似乎适用于已在Pint中定义的单元

>>> import pint
>>> ureg = pint.UnitRegistry()
>>> Q = ureg.Quantity
>>> a = Q(5, 'm/s')
>>> a
<Quantity(5, 'meter / second')>
>>> a.to('ft/s')
<Quantity(16.404199475065617, 'foot / second')>
Run Code Online (Sandbox Code Playgroud)

我试图定义自己的单位,代表百分比.就单位转换而言,百分比只是无量纲分数的100倍,这就是我定义它的方式.

>>> ureg.define('percent = dimensionless * 100 = pct')
>>> a = Q(5, 'pct')
>>> a
<Quantity(5, 'percent')>
Run Code Online (Sandbox Code Playgroud)

但是我似乎无法在fraction('dimensionless')和'pct'.之间来回转换.

>>> a.to('dimensionless')
Traceback (most recent call last):
  File "<pyshell#31>", line 1, in <module>
    a.to('dimensionless')
  File "C:\Python35\python-3.5.1.amd64\lib\site-packages\pint\quantity.py", line 263, in to
    magnitude = self._convert_magnitude_not_inplace(other, *contexts, …
Run Code Online (Sandbox Code Playgroud)

python units-of-measurement pint

6
推荐指数
3
解决办法
1024
查看次数