Java 保持双人间的最大值为1.0

Java 保持双人间的最大值为1.0,java,math,modulus,Java,Math,Modulus,好的,这应该是一个相当简单的问题,但我只是不能得到这个权利。我有一个累积的总数,返回一个双倍。这些表示百分比,并且它永远不应为0.0。。所以我想用d%1来控制1。2.13变为0.13,或2.98变为0.98,但3.0变为0.0,而不是1.0(100%) 我显然在做一些根本错误的事情?或者我只是作弊说如果0那么1 谢谢%是模运算符 来自维基百科: 在计算中,模运算在一个数除以另一个数(有时称为模)后找到余数 换言之,3模1=0,因为3除以1后的余数为零。模的行为与预期一样-3.0除以1.0时没有余

好的,这应该是一个相当简单的问题,但我只是不能得到这个权利。我有一个累积的总数,返回一个双倍。这些表示百分比,并且它永远不应为0.0。。所以我想用d%1来控制1。2.13变为0.13,或2.98变为0.98,但3.0变为0.0,而不是1.0(100%)

我显然在做一些根本错误的事情?或者我只是作弊说如果0那么1


谢谢

%是模运算符

来自维基百科:

在计算中,模运算在一个数除以另一个数(有时称为模)后找到余数


换言之,3模1=0,因为3除以1后的余数为零。

模的行为与预期一样-3.0除以1.0时没有余数

如果要处理无余数的特殊情况:

d %= 1.0
d = d == 0.0 ? 1.0 : d;
  • 当累计(百分比)总和达到1.0(100%)边界时

    • 为什么要将其设置为
      sum=sum%1
    • 如果含义是某个操作的百分比,那么它不应该仍然是
      1.0
    • 因此,在求和时,我会这样做:

      for (...)
       {
       // some stuff of yours
       sum+=...;
       if (sum>1.0) sum=1.0;
       }
      
  • 如果您仍然需要模数1,则可以利用地板

    • 但那个操作对我来说毫无意义(除了脉冲进度条)
    • 除非这笔钱是用来做别的,我想

      for (...)
       {
       // some stuff of yours
       sum+=...;             
       if (sum>1.0) sum-=floor(sum);
       }
      
    • 如果总和可以为负值,则使用
      ceil

    • 如果不需要
      1.0
      ,则忽略
      if
      ,并始终低于下限(总和)
  • 如果您知道目标金额

    • 如果总和表示进度状态
    • 您知道最后一个值(整和)
    • 然后
      百分比=总和/整和)

  • 关于
    x/(x+a)
    1-exp(-ax)

    2.0给了你什么?我不完全明白你在做什么。一般来说,在Java中进行数学运算时使用BigDecimal。2%1=0。。这是一个连续的小数列表,但每次它碰到一个整数,我希望它的结果是1,所以1,2,3,…,n=1,1,1,1。或者1.1、2.1、…、n.1=0.1、0.1等您想要的
    0%1
    =>
    1
    ?您的问题缺乏明确的说明:为什么接受一个非单调的函数?(如
    f(1.98)>f(2.13)
    )。在我看来,这根本是错误的。@YvesDaoust,如果目标总和只是大致已知的话,那就非常好:)没有想到(+1)