JavaScriptの数学系を拡張するmathjsは、行列から複素数、cmといった生活単位、果ては原子物理の定数までサポートする驚愕のライブラリです。
今回はcmやinchといった、長さを扱う別の単位が混在した式を楽にする方法を扱います。
実際のところ
生活単位の計算
mathjsはcmといった生活上よく使う単位を記号つきで扱う機能があります。
var a = math.unit(55, 'cm') /* { [String: '55 cm'] units: [ { unit: [Object], prefix: [Object], power: 1 } ], dimensions: [ 0, 1, 0, 0, 0, 0, 0, 0, 0 ], value: 0.55, fixPrefix: false, isUnitListSimplified: true } */ var b = math.unit(100, 'cm') /* { [String: '100 cm'] units: [ { unit: [Object], prefix: [Object], power: 1 } ], dimensions: [ 0, 1, 0, 0, 0, 0, 0, 0, 0 ], value: 1, fixPrefix: false, isUnitListSimplified: true } */
計算するときは若干注意が必要です。
何も考えないで足し算すると、文字列化されてしまいます。
a + b
// 55 cm100 cm
ここはmathjs経由で計算するようにしましょう
var c = math.add(a,b) /* { [String: '155 cm'] units: [ { unit: [Object], prefix: [Object], power: 1 } ], dimensions: [ 0, 1, 0, 0, 0, 0, 0, 0, 0 ], value: 1.55, fixPrefix: false, isUnitListSimplified: true } */
これだけだとナンのありがたみも無さそうですが……
mathjsは別種の単位を混在して使うこともできるのです。
var d = math.add(math.unit(4,'inch'),math.unit(20,'cm')) /* { [String: '11.874015748031496 inch'] units: [ { unit: [Object], prefix: [Object], power: 1 } ], dimensions: [ 0, 1, 0, 0, 0, 0, 0, 0, 0 ], value: 0.3016, fixPrefix: false, isUnitListSimplified: true } */
(おまけ)学問の定数
電磁気学で使うようなμも、量子力学なんかで使うプランク定数系までサポートしています。
プランク単位系 - Wikipedia
学部教科書レベルならブラウザ上で難なく計算できそうです……スゴイ時代になったものですね。