Преобразование единиц Java

#java #jscience

#java #jscience

Вопрос:

У меня есть таблица базы данных, в которой хранятся полные названия единиц измерения, такие как литры, килограммы, миллилитры, миллиграммы и т.д.. Мне нужна библиотека для распознавания этих единиц и преобразования ее в нужную мне единицу. Как мне это сделать?

Логика кода:

Я прочитаю единицу измерения «литры» из базы данных, и я хочу преобразовать ее в миллилитры, чтобы ее входные данные были «20 литров», а выходные данные должны быть «20000 миллилитров»

Я скачал библиотеку JScience, но я не уверен, как это сделать. пожалуйста, скажите мне, как это использовать, или предложите любую альтернативу. Было бы лучше, если бы вы объяснили мне пример кода. Спасибо!!

Ответ №1:

Я склонен сказать, используйте Frink, но это делает намного больше, чем вам нужно здесь, хотя и решает проблему

 20 litres -> milliliters
//gives 20000
  

И это просто классный маленький язык. В Java вам пришлось бы запускать его как любую другую библиотеку сценариев. На веб-сайте есть множество информации

Комментарии:

1. это библиотека, которую я могу подключить к моему существующему приложению и использовать его?

2. Это действительно полноценный язык программирования, основанный на идее вычислений и преобразований единиц измерения. Но вы можете использовать его как библиотеку в своем Java-приложении. Смотрите документацию здесь: futureboy.us/frinkdocs/integrate

3. спасибо за этот совет, приятель .. я тоже на него посмотрю. На самом деле я начал писать свой собственный фразер для JScience. но Frink действительно хорош в использовании… попробую, если у меня не получится использовать JScience. Большое вам спасибо!!!

4. Всегда пожалуйста. Это может оказаться полезным, если вы обнаружите, что у вас есть много единиц измерения разных типов (литры, метры, фунты, кубические футы и т.д.). Размер файла jar составляет около 1 Мб, поэтому, если это не имеет большого значения, я бы добавил его, хотя бы только для базовых преобразований единиц измерения

Ответ №2:

Я не в курсе, что JScience предоставляет средство для разбора строк типа «20 литров» (это написание заставляет меня съежиться …), поэтому вам, вероятно, придется справиться с этим самостоятельно, разделив строку на количества и единицы.

Получив это, вы можете использовать JScience для преобразования между единицами измерения достаточно легко, хотя очевидно, что преобразование из литров в миллилитры является тривиальным. Но в принципе, это что-то вроде:

 Measure<Integer, Volume> input = Measure.valueOf(20, NonSI.LITRE);
Measure<Integer, Volume> output = input.to(SI.MILLI(NonSI.LITRE));

System.out.println(output);
  

Комментарии:

1. я могу отделить единицы измерения от числа. но можем ли мы заставить JScience понять, что «литры» означают стандартный NonSI.LITRE. Проблема в том, что у меня много подобных модулей, поэтому мне сложно написать код hal = ndling для каждого модуля, который я использую. итак, как нам это сделать?

2. @Deepak: Нет, вам придется анализировать единицы измерения самостоятельно. Их не так много.

3. где будут сгруппированы миллилитры? я не могу найти это внутри SI и в NonSI…

4. могу ли я использовать это как этот SI.MILLI (NonSI.LITER); ?

5. @Deepak: Да, это то, что говорится в моем ответе