5.24.2015

Scala: Adding Two Long Values Safely

Scala: 2つのLong値を安全に足す

 

Long の足し算でオーバーフロー/アンダーフローが発生するかどうか検知したい。

BigInt に変換してから値を足し込み、有効な Long値かチェックする。

def safeAddition(a: Long, b: Long): Option[Long] =
  Some(BigInt(a) + BigInt(b)).withFilter(_.isValidLong).map(_.toLong)

実行例

scala> safeAddition(Long.MaxValue, 0)
res0: Option[Long] = Some(9223372036854775807)

scala> safeAddition(Long.MaxValue, 1)
res1: Option[Long] = None

scala> safeAddition(-1, Long.MinValue)
res2: Option[Long] = None

scala> safeAddition(Long.MaxValue, Long.MinValue)
res3: Option[Long] = Some(-1)

0 件のコメント:

コメントを投稿