1

我很难找到一种将不同类型的单元转换为其他各种类型的有效方法。

开关盒可以工作,但 IMO 这不是一种有效的方法,我将拥有 3 个不同的系统(SI、Imperial 和 US)。

我的转换器(在我的应用程序内)将始终从 SI 转换为某物或从某物转换为 SI。它降低了复杂性,但我仍然需要有关如何制作干净代码的建议。

我已经定义了我的转换输入参数是值(数字)和单位(字符串)。
我将有 2 个功能。SIToSomething(value, unit) 和 SOthingToSi(value, unit)。

定义单位是因为我将转换长度、重量、数量等。

你有什么建议?

4

3 回答 3

3

这个怎么样:

var converters = {
    'SIToImperial' : {
        'cm' : function(val) {
            // implementation, return something
        },
        'kg' : function(val) {
            // implementation, return something
        } //, etc.
    },
    'SIToUS' : {
        'cm' : function(val) {
            // implementation, return something
        },
        'kg' : function(val) {
            // implementation, return something
        } //, etc.
    },
    'USToSI' : {
        'cm' : function(val) { /* ... */ } // etc
    } // , etc
}

SIToSomething(value, unit, system) {
    return converters["SITo" + system][unit](value);
}

var meterInImperial = SIToSomething(100, 'cm', 'Imperial');
var fiftyKilosInUS = SIToSomething(50, 'kg', 'US');
于 2013-06-20T16:50:39.480 回答
2

您可以做的是拥有一个基本单位,并为每个目标单位定义与该基本单位之间的转换函数。然后,例如,要从 A 转换为 B,您将拥有以下内容:

A -> base -> B

这样,每个单位只需要两个转换函数(不包括基本单位):

var units = {
    a: {
        toBase: function(value) { return value * 2; },
        fromBase: function(value) { return value / 2; }
    },
    b: {
        toBase: function(value) { return 1.734 * value + 48; },
        fromBase: function(value) { return (value / 1.734) - 48; }
    }
}

function convertFromTo(unitA, unitB, value) {
    return unitB.fromBase(unitA.toBase(value));
}

convertFromTo(units.a, units.b, 36489);
于 2013-06-20T16:59:40.117 回答
0

进行与 SI 之间的所有转换。例如,如果转换英制->美国,你会去英制->SI->美国。

这是您可以付出的最小努力。它还可以“免费”为您提供 SI。

于 2013-06-20T17:24:33.960 回答