Требовать сбой с номерами с плавающей точкой

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.

Существует currentProgressPercentage для которого вы должны получить это исключение: NaN (это фактически не одно значение, но здесь это неважно). Оба сравнения будут ложными, и (float) (100.0 * currentProgressPercentage) вернет NaN который не находится в диапазоне 0..100 . NaN может быть получено, например, путем вычисления 0.0/0.0 .