固定小数点数
30分プログラム、その365。Scalaで固定小数を扱うクラスを作ってみた。
固定小数は、1.44を144、0.01を1のように小数点の位置を固定してしまう表現方法。
使い方
scala> val x = new FixNum(144,100) x: FixNum = 1.44 scala> val y = new FixNum(20,10) y: FixNum = 2.0 scala> x+y res0: FixNum = 3.44 scala> x-y res1: FixNum = -0.56
ソースコード
class FixNum(v : Int, u : Int) { val value = v val unit_value = u def +(that : FixNum) = lift(_ + _ ,that) def -(that : FixNum) = lift(_ - _ ,that) override def toString = (value / (unit_value : Double)).toString private def lift(f : (Int,Int) => Int ,that : FixNum) : FixNum = { val u = this.unit_value max that.unit_value val x = this.value * (u / this.unit_value) val y = that.value * (u / that.unit_value) new FixNum(f(x,y),u) } } val x = new FixNum(144,100) val y = new FixNum(20,10) println(x + y) println(x - y)