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