[单位换算

问题描述 投票:0回答:6

我正在开发单位换算工具,我对如何转换单位提出了疑问。我在互联网上发现了许多脚本,但是所有脚本都对所有单位值(天到秒,天到分钟,天到小时.......................)具有重复功能。 。 ) , 像这个http://dennisjaamann.com/blog/?p=44对于少量的单元(例如温度为3且长度为4的单元)非常好...

但是如果我需要提前一个,那么我将制作成千上万的代码,这将花费更多的时间和更少的性能。所以我猜想,使用一些数学方法更容易。

任何人都可以帮助我吗?

[一些需要在AS3中进行类似操作的在线JS转换器示例:

http://www.unitconverters.net/time-converter.html

非常感谢

javascript flash actionscript-3 actionscript flash-builder
6个回答
3
投票

您可以将所有单位预定义为一个公共单位。

例如

FOOT = 0.3048 metres
YARD = 0.9144 metres
INCH = 0.0254001 metres

然后,当有人想要将7英尺转换为码时。你做类似的事情。

convertUnits(feet, yards, 7);
function convertUnits(unitFrom:String, unitTo:String, amount:Number){
//(0.3048/0.9144)*7
return (myDictionary[unitFrom]/myDictionary[unitTo]) * amount;
}

可能工作吗?


1
投票

+ 1 @trevor和查找表

这是更灵活的解决方案,只是请注意不要混合公斤和距离:)

特殊情况是时间转换,您可以在其中使用内置的Date对象:

// how much is 3775 seconds?
var date:Date = new Date( null, null, null, null, null, 3775 );
// 1h 2min 55s
trace( date.hours, date.minutes, date.seconds )

这很方便,因为它可以管理与月份中的日计数有关的特殊情况:28、29、30或31。

您仍然可以使用trevor方法手动设置对应关系(1H = 3600 s,1 min = 60 s,1 ms = 0.001 s等)例如下面的代码在距离(@trevor的例子)和时间之间创建一个对应的“表格”;使用距离很简单,但是使用时间则比较棘手:

package  
{
import flash.display.Sprite;
public class Converter extends Sprite
{
    private var MILLIMETER:Number = .001;
    private var CENTIMETER:Number = .01;
    private var DECIMETER:Number = .1;
    private var METER:Number = 1;
    private var FOOT:Number = 0.3048;
    private var YARD:Number = 0.9144;
    private var INCH:Number = 0.0254001;

    private var MILLISECOND:Number = SECOND * 0.001;
    private var SECOND:Number = 1;
    private var MINUTE:Number = 60 * SECOND;
    private var HOUR:Number = 60 * MINUTE;
    private var DAY:Number = 24 * HOUR;
    private var MONTH:Number = 30 * DAY;
    private var YEAR:Number = 12 * MONTH;

    public function Converter() 
    {


        var seconds:Number = 10215464578;

        var date:Date = new Date( null, null, null, null, null, seconds );
        trace( date.fullYear, date.month, date.day, date.hours, date.minutes, date.seconds )

        //does the same as 
        var ye:Number = convertUnits( seconds, SECOND, YEAR, true );
        var mo:Number = convertUnits( seconds, SECOND, MONTH, true )    % ( YEAR / MONTH );
        var d:Number = convertUnits( seconds, SECOND, DAY, true )       % ( MONTH / DAY );
        var h:Number = convertUnits( seconds, SECOND, HOUR, true )      % ( DAY / HOUR );
        var mi:Number = convertUnits( seconds, SECOND, MINUTE, true )   % ( MINUTE );
        var s:Number = seconds % MINUTE;
        trace( ye, mo, d, h, mi, s );

    }

    private function convertUnits( amount:Number, unitFrom:Number, unitTo:Number, floor:Boolean = false ):Number
    {
        var val:Number = ( unitFrom / unitTo ) * amount;
        return floor ? int( val ) : val;
    }
}
}

持续3775秒,它会给出:

1899 11 0 1 2 55

0 0 0 1 2 55

并且持续10215464578秒

2223 8 4 13 2 58

328 5 4 13 2 58

这意味着转换器不考虑日历本身;它计算时间量(一个月= 30天,这是不正确的。]


0
投票

无论如何单位转换都将很快。有用于转换为任何类型单位的设置公式,因此只需在代码中重新创建它们即可。不仅如此,如果您全部使用Javascript进行操作,那么无论如何,都是用户计算机必须执行所有计算,因此它的速度与他们的计算机一样快。]

[如果我是你,那么我将随即开始转换单位,并继续进行,直到最终得到可用的东西,然后对其进行重构。


0
投票

为了节省代码,您可能希望以不同的方式工作-为每种转换类型定义一个“公式”,并且在请求转换时应用正确的公式-这将需要一个接受值和公式并根据输入的值计算公式并吐出结果。但是,这仍然需要您-开发人员-输入所有公式,并编写代码以找到正确的转换公式并执行。可能就这么多。

祝你好运


0
投票

现在,对于日期和时间的转换,计算和格式设置(包括i18n),可以使用MomentJs

对于所有其他转换,由于不需要类似的解决方案,我也开始研究MeasurementJs,该解决方案也试图针对诸如MomentJs的精美简单的API。


-1
投票

[[Kg至lbs] [1]转换器是一个非常智能且方便的公式系统,该系统能够将任何公斤值转换为磅,也可以用其他方式转换。这种解决方案的基本思想是使人们的生活更轻松,并且不因繁琐的计算而打扰他们。有时候,例如在体育馆里时,您需要将公斤转换为磅的选项,而您实际上不知道要举多​​少公斤。公斤到磅的转换可以通过在代码公式中实现而实现,这些公式基本上可以计算特定人员给出的每个值。有时可以在新的手机或智能手表中找到这种解决方案。https://howkgtolbs.com/

© www.soinside.com 2019 - 2024. All rights reserved.