我已经编写了自定义函数来获取长数的绝对值。
下面是def absolute(x:Long):Long= x match {
case y:Long if(y<0) => -1 * y
case y if(y>=0) => y
}
println(absolute(-9223372036854775808L))
println(absolute(-2300L))
以下是上述程序的输出
-9223372036854775808
2300
我不确定为什么它适用于很长的值。关于同样的Ang建议。
答案 0 :(得分:6)
这只是整数溢出的情况:
scala> Long.MaxValue
res0: Long = 9223372036854775807
scala> Long.MinValue
res1: Long = -9223372036854775808
因此,当你否定-9223372036854775808
时,你将Long
溢出1个单位,导致它环绕(对自己!)。
此处不需要匹配:
scala> def abs(x: Long): Long = if (x < 0) -x else x
abs: (x: Long)Long
答案 1 :(得分:1)
为什么不使用scala.math.abs? 见scala.math