C# C语言中的测量单位转换逻辑
我正在为我的程序添加一项功能,在该功能中,用户可以随时更改其测量单位,并让程序重新计算其输入和输出 如果用户输入一件物品20磅,然后决定以千克为单位工作,他可以随时选择这样做的选项,程序将重新计算他的20磅输入到9千克。然后,如果他决定以盎司为单位工作,它会将9公斤的重量转换为320盎司,依此类推C# C语言中的测量单位转换逻辑,c#,logic,measurement,C#,Logic,Measurement,我正在为我的程序添加一项功能,在该功能中,用户可以随时更改其测量单位,并让程序重新计算其输入和输出 如果用户输入一件物品20磅,然后决定以千克为单位工作,他可以随时选择这样做的选项,程序将重新计算他的20磅输入到9千克。然后,如果他决定以盎司为单位工作,它会将9公斤的重量转换为320盎司,依此类推 最有效的方法是什么?我一直在绞尽脑汁想办法实现正确的公式。用标准单位或你喜欢使用的单位进行计算 将用户的输入从他们希望的任何单位转换为标准单位。 使用标准单位执行计算。 将答案转换回用户想要的单位。
最有效的方法是什么?我一直在绞尽脑汁想办法实现正确的公式。用标准单位或你喜欢使用的单位进行计算 将用户的输入从他们希望的任何单位转换为标准单位。 使用标准单位执行计算。 将答案转换回用户想要的单位。
只有用户界面需要关心单位转换。代码的其余部分无需担心。在内部以已知测量单位存储值,例如,以kg为单位存储所有内容,并具有将已知单位转换为所有其他单位的方程式 基本上,您只需要转换显示单位,所有内部计算都可以在单个单位中完成
作为一个曲线球,F内置了一个强大的UoM机制,如果你想用最前沿的东西玩的话…在我开发的程序中,我们在Units名称空间下有单独的类,比如Units.Torque或Units.Length 如果您创建一个类似Units.Weight的类,并将所有转换因子作为常量值,将可能的单位作为枚举,则可以调用该类并转换为所需的单位。这是我们使用的系统的一个非常基本的示例:
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
}
}
}
有了这种结构,您可以在闲暇时随意转换任何单位类型。我们刚刚正式发布了我们的轻量级度量和数据类型转换库,用于C,也用于Java和JavaScript,它可以按照您的要求进行转换,而无需知道任何转换系数。您可以声明一个无状态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个可用测量值中的一个,它也是免费和开源的。我同意。不要从上一个单位转换,你会失去精度…否则你的着陆器将要么超调飞到太空中,要么撞到一个灿烂的火球表面;我建议对存储在数据库中的信息或存储数据的任何内容使用国际单位制。我已经编写了一个测试,可以做到这一点,但我添加此功能的人声称,他希望让代码进行所有转换,而不仅仅是对接口进行转换。很高兴知道我没有完全错:非常感谢你的帮助,如果你用标准单位做所有的计算,所有的输入和输出都必须转换,造成精度损失,除非用户碰巧用标准单位工作。如果以用户的工作单位执行所有计算,则仅当它们更改单位时才需要转换。