2017-12-29 67 views
2
private void waveformProgress(double currentProgressPercentage) { 
    if (currentProgressPercentage < 0.0f) currentProgressPercentage = 0.0f; 
    if (currentProgressPercentage > 1.0f) currentProgressPercentage = 1.0f; 
    waveView.setProgress((float) (100.0 * currentProgressPercentage)); 
    .. 
} 

나는 코 틀린 세터에 대한 호출에서가 setProgress 라인에 희귀 한 충돌 보고서가 있습니다이 필요 부동 소수점 숫자와 함께 실패

var progress: Float = 0F 
     set(value) { 
      require(value in 0..100) { "Progress must be in 0..100" } 
... 
     } 

나는 점 평등과 모든 부동에 대해 알고 있지만, 어떻게입니다 여기에서 요구가 실패 할 가능성이 있습니까? 어떻게 수정합니까? Crashlytics가 이전 버전에서 충돌이 발생하여 1..100 사이의 숫자를 유지하지 못했을 때 새 버전 번호를보고 할 가능성이 있습니다.

+3

[테스트 케이스] (https://stackoverflow.com/help/mcve)를 구성 할 수 있습니까? –

+0

값이'Float'이므로 float로 구성된 범위를 정확하게 사용해야합니다 :'value in 0F..100F' – Ilya

답변

3

이 예외가 발생하는 currentProgressPercentage이 있습니다 : NaN (실제로는 단일 값은 아니지만 여기에는 상관이 없습니다). 두 비교는 모두 거짓이며 (float) (100.0 * currentProgressPercentage)NaN을 반환하며 범위는 0..100입니다. NaN은, 예를 들어, 0.0/0.0을 계산함으로써 생성 될 수있다.