Библиотека преобразования единиц c # для количества еды - PullRequest
6 голосов
/ 22 марта 2011

Я хочу реализовать простую библиотеку для пересчета единиц измерения продуктов, например чайные ложки чашек.щепотка, миллилитры, унции, литры, граммы, фунты и т. д. и т. д. и т. д. и т. д. Существуют ли какие-либо библиотеки, которые я могу использовать уже, если нет, я хочу свернуть свои собственные псевдо-способом ниже:

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

Указатели, подводные камни тоже наивны?Любая помощь будет полезна.Нынешняя реализация с открытым исходным кодом, которую я могу изучить, тоже будет отличной.ТИА

Ответы [ 5 ]

3 голосов
/ 06 апреля 2011

@ n4rzul, я начал разрабатывать библиотеку единиц измерения с открытым исходным кодом на C #, которая может быть легко расширена на любую единицу вашего запроса.Пожалуйста, посмотрите на веб-сайт проекта на Github, https://github.com/cureos/csunits, и посмотрите, отвечает ли эта библиотека вашим потребностям.

2 голосов
/ 22 июля 2013

Я недавно выпустил Units.NET на GitHub и на NuGet .

Это дает вам все общие единицы и преобразования. Это легкий, испытанный блок и поддерживает 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)
1 голос
/ 22 марта 2011

Не знаю, будет ли оно соответствовать всем вашим потребностям, но это выглядит для того, чтобы охватить хороший диапазон измерений:

http://unitconvertlibrary.codeplex.com/

Хотя, похоже, он находится в разработке, и естьв исходном хранилище доступен только один класс

1 голос
/ 22 марта 2011

Я написал это некоторое время назад http://www.carbonatethis.com/archives/38

0 голосов
/ 22 июля 2013

Я также разработал библиотеку единиц.Он доступен на NuGet здесь .Репозиторий находится в моей учетной записи bitbucket, связанной с моим профилем здесь, на SO.

...