Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

mathjsでcm、inchのような単位が混在した計算を扱う

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
学部教科書レベルならブラウザ上で難なく計算できそうです……スゴイ時代になったものですね。

参考もと

mathjs.org