6

我想为食物测量实现一个简单的单位转换库,即杯子茶匙。捏,毫升,盎司,升,克,磅等等等。有没有我可以使用的库,如果没有,我想以下面的伪方式滚动我自己的:

enum Unit
{
    Centimeters = 0,
    Meter = 1,
    Kilometer = 2           
}


//| |           |   0       |  1    |   2       |
//----------------------------------------------
//| |           |Centimeters| Meters| Kilometers|
//----------------------------------------------
//|0|Centimeters|1        | 0.01  | 0.000001  |
//----------------------------------------------
//|1|Meters  |100        | 1      | 1000     |
//----------------------------------------------
//|2|Kilometers |100000     | 1000  | 1         |
//----------------------------------------------


public float Convert(Unit UnitFrom, Unit UnitTo, UnitValue)
{
   float factor = UnitMatrix[UnitFrom][Unit UnitTo];
   return UnitValue * factor;
}

//Usage
Convert(Unit.Kilometers, Unit.Meters, 5)
// Lookup factor in this case would be the one at [2, 1] i.e. 1000 so output is 5000

指针,陷阱,太天真了?任何帮助都会很有用。我可以研究的当前开源实现也会很棒。TIA

4

5 回答 5

3

我最近在GitHubNuGet上发布了 Units.NET 。

它为您提供所有常用单位和转换。它是轻量级的,经过单元测试并支持 PCL。

虽然我还没有合并所有的食物单元,但它在要添加的东西列表中。

示例转换:

Length meter = Length.FromMeters(1);
double cm = meter.Centimeters; // 100
double yards = meter.Yards; // 1.09361
double feet = meter.Feet; // 3.28084
double inches = meter.Inches; // 39.3701

解析并获取特定于文化的缩写:

var us = new CultureInfo("en-US");
var norwegian = new CultureInfo("nb-NO");

Unit.Tablespoon == UnitSystem.Create(us).Parse("tbsp")
Unit.Tablespoon == UnitSystem.Create(norwegian).Parse("ss")  

"T" == UnitSystem.GetDefaultAbbreviation(Unit.Tablespoon, us)
"ss" == UnitSystem.GetDefaultAbbreviation(Unit.Tablespoon, norwegian)
于 2013-07-21T23:04:25.730 回答
3

@n4rzul,我已经开始在 C# 中开发一个开源的度量单位库,可以根据您的要求轻松扩展它。请查看 Github 上的项目网站,https://github.com/cureos/csunits,看看这个库是否满足您的需求。

于 2011-04-06T09:19:00.487 回答
1

我不久前写了这个 http://www.carbonatethis.com/archives/38

于 2011-03-22T14:18:18.577 回答
1

不知道它是否能满足您的所有需求,但这看起来涵盖了很好的测量范围:

http://unitconvertlibrary.codeplex.com/

虽然它看起来正在开发中,但源存储库中只有一个类可用

于 2011-03-22T14:21:14.893 回答
0

我还开发了一个单位库。它在 NuGet 上可用。该存储库位于我的 bitbucket 帐户上,该帐户与我在 SO 上的个人资料链接。

于 2013-07-22T01:33:08.320 回答