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 件のコメント:
コメントを投稿