mathjs-一对一转换复杂单位

时间:2019-10-08 14:20:03

标签: javascript mathjs

我正在使用mathjs(https://mathjs.org)进行一些计算,包括各种单位。计算中包含的值来自用户输入(单位的数字输入和选择输入)。为了比较结果,我需要将结果转换为相同的单元。

一个简单的例子:

var calculation = "userInput * 5"
var userInput = "50kg"
var result = math.evaluate(calculation.replace("userInput",userInput)) 
var displayResult = math.unit(result).to("g").format({lowerExp: -10, upperExp: 10})

console.log("displayResult",displayResult) //returns 250000 g

到目前为止,一切都很好。当单位由不同单位组成时,就会变得复杂:

var userDist = "50 km" //could be in m, km, miles, inches, etc
var userTime = "1h" //could be in h, d, s, m, etc

var calculation = "userDist/userTime"

var result = math.evaluate(calculation.replace("userDist",userDist).replace("userTime ",userTime )) 
var displayResult = math.unit(result).to("m/s").format({lowerExp: -10, upperExp: 10})
console.log("displayResult",displayResult) 

在这种情况下,我必须知道,输出单位将为distance/time,以便将其转换为m/s

现在的事情是,该计算可能会变得非常复杂,这是用户自己输入的内容,包括以前的计算结果。因此,根本无法知道预期的单位是。我只有来自用户输入的起始单位。

由于计算中可能会混合使用不同的单位(面积,距离,权重,货币等),因此我希望能够独立转换起始单位(让用户决定要使用哪种单位他想看到,例如距离和面积应始终以米为单位,时间始终以秒为单位),因此必须将其一一转换。 例如像这样:

var userDist = "50 km" //could be in m, km, miles, inches, etc
var userTime = "1h" //could be in h, d, s, m, etc

var calculation = "userDist/userTime"
var result = math.evaluate(calculation.replace("userDist",userDist).replace("userTime ",userTime )) 

//transform first km to m
var displayResult = math.unit(result).to("m")

//transform h to s
displayResult = displayResult.to("s")

//formatting output
displayResult = displayResult.format({ lowerExp: -10, upperExp: 10 })
console.log("displayResult", displayResult)

但是这将引发错误。我尝试在计算之前转换起始单位,但结果是相当随机的。 我玩了一段时间,但找不到解决方案。有人知道解决此问题的方法吗?我不是唯一一个遇到这个问题的人。

0 个答案:

没有答案