@kyanny's blog

My thoughts, my life. Views/opinions are my own.

バイト -> ギガバイトに変換する関数

ちょっと欲しくなったので書いてみた。

(defun gigabytes (n)
  (interactive "nBytes:")
  (message (number-to-string (/ n 1.0 1024 1024 1024))))

1.0 で割らないと整数の割り算になって小数点以下が得られないのと、 message は文字列を受け取る関数なので割り算の結果をそのまま渡せなかったので number-to-string で文字列に変換した。

しかし、大きな数字を渡すと結果がマイナスになってしまう。たぶん Emacs Lisp における整数の範囲を超える数字を渡すとバグるんだろう。 BigInt 的なものを探してそれを使えば回避できるのかな?