C#中的测量转换逻辑单位

时间:2010-05-07 21:11:57

标签: c# logic measurement

我正在为我的程序添加一个功能,用户可以随时更改其测量单位,并让程序重新计算其输入和输出。

如果用户输入了一个项目的20磅,然后决定他想以千克为单位工作,他可以​​随时选择一个选项来执行此操作,程序将重新计算他​​的20磅输入为9Kg。然后,如果他决定他宁愿以盎司工作,它会将9Kg转换为320盎司,依此类推。

最有效和最有效的方法是什么?我一直绞尽脑汁想要找到一种方法来实施正确的公式。

4 个答案:

答案 0 :(得分:14)

以标准单位(或您喜欢使用的单位)进行所有计算。

  • 将用户的输入从他们想要的内容转换为标准单位。
  • 使用标准单位执行计算。
  • 将答案转换回用户想要的单位。

只有用户界面需要关心单位转换。其余的代码不需要担心它。

答案 1 :(得分:4)

将值存储在内部的已知测量单位(例如,以kg为单位存储所有内容),并将公式转换为已知单位或从已知单位转换为所有其他单位。

基本上您只需要转换单位进行显示,所有内部计算都可以在一个单元中完成。

作为一个曲线球,F#内置了一个强大的UoM机制,如果你想要一些前沿的东西来玩......

答案 2 :(得分:0)

在我参与过的程序中,我们在“Units”命名空间下有单独的类,例如Units.Torque或Units.Length。

如果您创建一个类Units.Weight并将所有转换因子作为const值并将可能的单位作为枚举,则可以调用该类并转换为所需的单位。这是我们使用的系统的一个非常基本的例子:

namespace Units
{
    class Weight
    {
        public enum WeightType
        {
            kg,
            lb
        }

        const double kgTolbs = 2.20462262;

        public static double Convert(double value, WeightType fromUnits, WeightType toUnits)
        {
            //Code here to convert units
        }
    }
}

通过这种结构,您可以随意转换为任何单位类型。

答案 3 :(得分:0)

我们刚刚正式发布了针对C#(也适用于Java和JavaScript)的轻量级测量和数据类型转换库UnitOf,它可以满足您的要求,而无需知道任何转换因子。您可以声明一个无状态的UnitOf.Mass变量,该变量允许您转换为任何单位,或仅作为衬板执行转换:

//As a stateless variable
UnitOf.Mass unit = new UnitOf.Mass() .FromPounds(20);
double kilograms = unit.ToKilograms();  //9.07184
double ounces = unit.ToOuncesUS();  //319.99973897268154

//As one liners
double kilogram  = new UnitOf.Mass().FromPounds(20).ToKilograms();  //9.07184
double ounces = new UnitOf.Mass().FromPounds(20).ToOuncesUS();  //319.99973897268154

质量只是UnitOf提供的20种测量中的一种,它也是免费和开源的。