java - 如何添加 float 但将总数保持/包装在 0..1 范围内?

标签 java android

我正在对几个 alpha 值做一些动画,并想设置相对于引用值的值

obj1.alpha = refAlpha + 0.25f;
obj2.alpha = refAlpha + 0.75f;

例如,如果 refAlpha 为 0.5,那么我希望 obj2.alpha 为 0.25 而不是 1.25。 有什么数学函数可以做到这一点?

最佳答案

mod 运算符 % 将在包装方面发挥作用。 (它适用于 float 和整数)。

obj1.alpha = (refAlpha + 0.25f) % 1f
obj2.alpha = (refAlpha + 0.75f) % 1f

public static void main(String[] args) {
  System.out.println(1.25f % 1f); // --> 0.25
}

不幸的是,java 并没有完全按照数学定义实现 mod。 a % b 返回 (-b, b) 范围内的值,而不是 [0, b)。如果您曾经减去值,则结果可能因此为负数。如果这是您担心的用例,请考虑创建一个辅助函数来处理它:

public static float mod(float a, float b){
    return ((a % b) + b) % b;
}

这将使结果在 [0,b) 范围内。

关于java - 如何添加 float 但将总数保持/包装在 0..1 范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31594686/

相关文章:

java - 如何检查我们是否应该去谷歌搜索或只是简单的加载网址

java - 无法在 Solaris 上初始化类 sun.awt.X11GraphicsEnvironment

java - 使用 TreeNodes 扩展 Comparable 的广度优先二叉树搜索

java - 如何在另一个 Java 类中存储带有变量的字符串?

java - 如何在 El Capitan 上降级 Java

android - 当前使用的布局是横向还是纵向?

android - 在运行 Google Play Services < 7.5.0 的设备上使用 GcmNetworkManager

java - ArrayList 的 containsAll 返回错误值

android - 在应用程序 android 上集成 Admob 时出错(应用程序崩溃)

android - 检测应用程序是否从 Android Market 下载