Быстрый юнит-калькулятор

1495
endolith

Я хочу иметь возможность нажимать комбинацию клавиш, начинать вводить математическое выражение, которое включает в себя единицы и немного сложную математику (а не просто четырехфункциональный калькулятор), и сразу же получать результат в указанных мною единицах, которые я могу скопировать и вставить.

  • В настоящее время я открываю Firefox и нажимаю Ctrl + K, введите в поле поиска, и это обычно дает мне результат в раскрывающемся списке из Google Calculator . Однако это не всегда так, поэтому я нажимаю «=» в конце, ожидаю результата, удаляю равные, жду результата, понимаю, что он не понимает, как я набрал единицу, открываю результат в новая вкладка и т.д. это отстой.
  • Wolfram Alpha умнее, но намного медленнее, и выводятся все изображения, а не текст, и у меня нет быстрого виджета для этого, если такая вещь вообще может существовать.
  • У единиц GNU есть тонна единиц, и это здорово, и я могу определить свои собственные единицы, что замечательно, но они должны быть написаны особым, не интуитивно понятным способом, это не обрабатывает много продвинутой математики, и мне нужно открыть терминал, запустить юниты и т. д. Я ненавижу командную строку.
  • Я потратил много времени, пытаясь создать интерфейсы для unitsDeskbar и Launchy, но я не настоящий кодер и больше не использую ни один из них.

Любые другие решения или улучшения этих?

(Кроссплатформенность лучше)

Идеальный калькулятор с поддержкой юнитов сможет справиться со всеми этими вопросами:

  • 7 nV/sqrt(Hz) ⋅ sqrt(20000 Hz - 20 Hz) → μV = 0,99 мкВ
  • sqrt(4*k*25 °C * 1 kΩ * (20 kHz - 20 Hz)) = 0,57357 мкВ
  • 3.5 billion kilowatt-hours per year = 399,5 МВт
  • 60 billion kWh per year = 6,849 ГВт
  • 1/sqrt(2 mH * 2 nF) = 500 кГц
  • 1/(2*pi*10 kΩ * 22 µF) = 0,7234 Гц
  • 1/(2·π·100 Hz·30pF) → ohm = 53,05 МОм
  • −10 dBV + 4 dB + 10 dB − 12 dB → dBu = -5,782 дБн
  • 94 dBSPL → Pa = 1,00237 Па
  • 54 inches + 2 feet → cm = 198,1 см
  • 12 V ÷ 141.5 µA = 84,8 кОм
  • 16 bit * 44.1 kHz * 2 → kbit/s = 1411 кбит / с
  • 1 hundred V / 5 ohms = 20 А
  • furlong per fortnight → cm/minute = 0,9999
  • attoparsec/microfortnight → in/second = 1,004
  • 1 ft / speed of sound = 0,89576 мс
5
Каков уровень сложности проблем, которые вы пытаетесь решить? spowers 14 лет назад 1
Что вы пытались написать, что комбинация `bc -l` и` units` не может сделать? Benjamin Bannier 14 лет назад 0
Can you give an example of using `bc -l` and `units` together? I didn't know that was possible. endolith 14 лет назад 1
@honk: sounds like something you should post in an answer (y'know, with an example). @endolith: use @ for [comment notifications](http://meta.stackoverflow.com/questions/43019/how-do-comment-replies-work) so the user gets notified when you reply to them. quack quixote 14 лет назад 0
@endolith: На самом деле мой комментарий был слишком быстрым, `bc` ничего вам не даст, если вы не планируете определять свои собственные функции. Тригонометрическая, экспоненциальная и логарифмическая функции уже определены в «единицах» (отсутствуют только функции Бесселя). Benjamin Bannier 14 лет назад 0
@ Quack Quixote: для этого должна быть кнопка ответа. endolith 14 лет назад 0
@endo: предложите это на [meta] (http://meta.stackoverflow.com/), если хотите ... :) quack quixote 14 лет назад 0

5 ответов на вопрос

7
Dennis Williamson

Я очень впечатлен Qalculate! ,

Qalculate!  Скриншот

+1 Я тоже, хотя мой пользовательский интерфейс (плазмоид Qalculate для KDE) не предлагает способ выразить результат в указанных единицах. Я работаю над этим, деля результат на единицы, которые хочу. Я забыл, может ли это сделать полный интерфейс, если он еще существует. (Просто так понятно: даже с учетом ограничений пользовательского интерфейса, это все еще мой любимый калькулятор для всего, для чего мне не нужен Mathematica) David Z 14 лет назад 0
I don't see standard temperature, speed of sound, and I don't understand how it handles dB, but I am also very impressed. I wish the answers appeared after a short delay without pressing Enter, too. But these are all things I can complain about. :) endolith 14 лет назад 0
@endolith: You can go into Edit>Manage Variables>Physical Constants and Edit>Manage Units and add your own or edit existing entries. I've never seen a calculator complete a calculation after a timeout. One thing I would like to see in this program is history navigation using arrow keys or scroll-and-click with the mouse instead of having to copy-paste from the history. Dennis Williamson 14 лет назад 1
Google Calculator in the Firefox search bar completes as I type, though I have to prod it sometimes by typing an equals sign. The thing I wrote for Launchy also displays the result as you type, though it was slow because of the way it accesses Units. endolith 14 лет назад 0
@DavidZ: (между тем) Qualculate предлагает команду «to» для преобразования единиц: «2m в cm» будет выражать результат в см. Обратите внимание, что (lib) qalculate поставляется с qalc, версией командной строки, которая использует readline и может вызывать историю с помощью клавиш со стрелками или Ctrl-R (и других хитрых приемов CLI, предоставляемых readline, таких как завершение табуляции, копирование / вставка, отмена, и т.д., также можно найти, например, в Bash). AstroFloyd 7 лет назад 0
Это действительно хорошая программа. Теперь, когда я перестал использовать Linux, я хотел бы, чтобы он был поддержан в Windows. : / endolith 7 лет назад 0
3
shark.dp

насекомое имеет как веб-, так и терминальную версии. Он поддерживает синтаксический анализ, обработку и преобразование физических единиц, например:

>>> 2min + 30s  = 2.5min  >>> 40000km / speedOfLight -> ms  = 133.426ms  >>> 6Mbit/s * 1.5h -> GB  = 4.05GB  >>> 2J·s + 3W  Unification error:  Cannot unify unit W (base units: kg·m²·s⁻³) with unit J·s (base units: kg·m²·s⁻¹) 
Это означает, что «дБ» означает «децибайт». : / endolith 7 лет назад 0
@endolith: Спасибо! Отслеживается здесь: https://github.com/sharkdp/insect/issues/67 shark.dp 7 лет назад 1
2
Benjamin Bannier

Для простого решения, которое может быть написано в скрипте, вы можете посмотреть sympyмодуль python.

$ cat conv.py  #!/usr/bin/env python import sys from sympy.physics.units import * from sympy.printing.pretty.pretty import pprint from sympy.abc import x, y, z from sympy import *  # adding extra units is easy parsec = 3.26163626*ly  if __name__ == '__main__': s_input = sys.argv[1] s_unit = sys.argv[2] input = eval(s_input) # input string unit = eval(s_unit) # output unit  print 'Converting:' pprint(input) print print str((input/unit).evalf()) +' '+ s_unit 

что дает, например, какое-то умеренно уродливое выражение, преобразованное в мм:

$./conv.py 'tanh(3*m/(2*m))*sinh(60*deg)*1*parsec' 'mm'   Converting: /π\ 3.08574615554565e+16*m*sinh|--|*tanh(3/2) \3 /  3.48955431541888e+19 mm 

Конечно, это действительно заядлый код, который не проверяет совместимость единиц ввода и вывода, поэтому в результате вы можете получить дополнительные единицы.

$./conv.py 'c' 'parsec'  Converting: 299792458*m ----------- s  9.71539598165644e-9/s parsec 
Также см. Https://launchpad.net/python-quantities endolith 14 лет назад 0
@endolith: Все зависит только от того, какую математику вы хотите. Основы в «единицах», но, очевидно, в них нет символической алгебры или высшей математики. Benjamin Bannier 14 лет назад 0
2
Ronald

Я в основном делюсь вашими идеями об идеальном калькуляторе и недостатках использования GNU Units и Wolfram, а также запускаю собственный онлайн-калькулятор, который я выложил в сети на PhyCalc.com . Он создает свою собственную алгебру единиц для единиц СИ и использует Единицы GNU для преобразования в другие единицы или как запасной вариант, когда само выражение содержит не-единицы СИ.

Его цель - интерпретировать ввод Unicode там, где это имеет смысл. И пытается быть умным в угадывании точного количества и соответствующей единицы. Он автоматически вставляет SI-префиксы. (так же, как мой старый надежный карманный калькулятор Casio в режиме «ENG»)

Некоторые комментарии о ваших «идеальных калькуляторах» входах и ответах:

sqrt (4 * k * 25 ° C * 1 кОм * (20 кГц - 20 Гц)) = 0,57357 мкВ

Не совсем точно автоматически считать ° C абсолютной температурой. Также k не совсем однозначный символ для постоянной Больцмана. Однако это должно дать вам требуемый ответ:

sqrt(4*1.38064852e-23J/K*(273.15K+25 °C) * 1 kΩ * (20 kHz - 20 Hz)) in μV 

Они терпят неудачу в единицах GNU:

3,5 миллиарда киловатт-часов в год

1 фут / скорость звука

Альтернативы единиц GNU могут быть:

3.5 billion kWh per year 1 ft / mach in ms 

1 / (2 · π · 100 Гц · 30 пФ) → Ом

Вы можете пропустить часть "→ ом". Вот что я имел в виду, когда умел угадывать количество :-).

−10 дБВ + 4 дБ + 10 дБ - 12 дБ → дБн

GNU Units имеет некоторое преобразование в дБ, но оно определяется как 10 ^ (x / 10), который является скаляром, который не будет прибавлять к напряжению, где вы предполагаете, что калькулятор должен распознавать, что он должен масштабировать напряжение вместо мощности и вместо этого следует применить масштабирование 10 ^ (х / 20). Это было бы очень круто, но я боюсь, что это слишком большой мост для юнитов гну. По крайней мере, это даст вам правильный ответ с использованием единиц GNU:

 1V*dB(-10)^0.5*dB(4)^0.5*dB(10)^0.5*dB(-12)^0.5 → dBu 

Но я понимаю, почему вы можете найти это не интуитивным.

В противном случае я думаю, что PhyCalc.com может приблизиться к вашему идеальному калькулятору.

Для быстрого доступа к нему я сопоставляю свою выделенную клавиатуру с калькулятором, добавляя к следующей строке имя / значение строки (REG_SZ) в реестре Windows:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AppKey\18] "ShellExecute"="http://phycalc.com" 
-1
Majik

Wolfram Alpha способен на математические вычисления и не требует от вас загрузки или установки чего-либо.

Проверьте здесь, как использовать его математические функции.

Похожие вопросы