일반적으로 모든 숫자 형식의 값을 취할 수 있으며 숫자 형식의 0이 아닌 값으로 나누고 합리적인 결과를 얻을 수 있습니다.일반 숫자 부분
212.7/6 // Double = 35.449999999999996
77L/2.1F // Float = 36.666668
한 가지 예외는, 내가 찾은 것을, 우리는 분수 형 (Float
또는 Double
)와 BigInt
을 혼합 할 수 있다는 것입니다.
그러나 제네릭 분야에서는 Integral
과 Fractional
유형의 흥미로운 차이점이 있습니다.
// can do this
def divideI[I](a: I, b: I)(implicit ev: Integral[I]) = ev.quot(a,b)
// or this
def divideF[F](a: F, b: F)(implicit ev: Fractional[F]) = ev.div(a,b)
// but not this
def divideN[N](a: N, b: N)(implicit ev: Numeric[N]) = ev.???(a,b)
난이, 진짜 문제가되는 이유에 대한 궁금입니다 동안이 제한을 회피하기 위해 가능한 해결 방법의 일종이되어 있습니까?
사용자 (호출 코드)를 'Integral' 또는'Fractional'으로 제한하지 않고 기본 유형으로 수행 할 수있는 것과 동일한 (다소간) 간단한 수학 연산을 수행 할 수 있기를 바랍니다. 구현을 숨기고 (결과를 얻기위한 수학 연산) 사용자에게 가장 넓은 입력 옵션 ('Numeric')을 제공하고 싶습니다. 수학 연산이 '+', '-'및 '*'로 제한되는 경우 쉽게 할 수 있습니다. 그것은'/'가 그 세트에 포함되지 않는 것은 이상하게 보입니다. – jwvh