要求失败,浮点数

问题描述 投票:2回答:1
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));
   ..
 }

在调用kotlin setter时,我在setProgress行上有罕见的崩溃报告:

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

我知道浮点相等和所有,但是如何在这里失败?我该如何纠正?我想Crashlytics可能会在旧版本发生崩溃时报告新版本号,但不能确保数字介于1..100之间。

java floating-point kotlin
1个回答
3
投票

有一个currentProgressPercentage你应该得到这个例外:NaN(它实际上不是单个值,但这在这里无所谓)。两次比较都是错误的,而(float) (100.0 * currentProgressPercentage)将返回NaN,这不在0..100的范围内。例如,通过计算NaN可以产生0.0/0.0

© www.soinside.com 2019 - 2024. All rights reserved.