mathjs - преобразовывать сложные единицы один за другим - PullRequest
0 голосов
/ 08 октября 2019

Я использую 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)

Это, однако, выдает ошибку. Я пытался преобразовать начальные единицы перед вычислением, но результат довольно случайный. Я играл некоторое время, но не мог найти решение. Кто-нибудь знает обходной путь к этой проблеме? Я не могу быть единственным, кто сталкивается с этим.

...