保持双倍,最高为1.0

时间:2015-03-19 05:29:28

标签: java math modulus

好的,这应该是一个相当简单的问题,但我无法做到这一点。我有一个累积的总和,它返回了一个双倍。这些代表百分比,它永远不应该是0.0 ..因此我认为使用d%1来保持1以下。工作正常2.13变为0.13,或2.98变为0.98,但3.0变为0.0而不是1.0(100%).. < / p>

我显然在这里做了一些根本错误的事情?或者我只是作弊并说是0然后1?

由于

4 个答案:

答案 0 :(得分:2)

%是模数运算符

来自维基百科:

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

换句话说,3 modulo 1 = 0,因为将3除以1后的余数为零。

答案 1 :(得分:1)

模数表现如预期 - 将3.0除以1.0时没有余数。

如果你想处理没有余数的特殊情况:

d %= 1.0
d = d == 0.0 ? 1.0 : d;

答案 2 :(得分:1)

  1. 累积(百分比)总和达到1.0(100%)边界

    • 为什么要将其设为sum=sum%1
    • 如果含义是某些操作的百分比,那么它应该不是1.0
    • 所以在总结的时候我会做这样的事情:

      for (...)
       {
       // some stuff of yours
       sum+=...;
       if (sum>1.0) sum=1.0;
       }
      
  2. 如果您仍然需要模数1,那么您可以利用楼层

    • 但是这个操作对我没有任何意义(除了脉冲进度条)
    • 除非将总和用于其他事情,否则我认为

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

    • 分别处理负值
    • 如果1.0也不需要,则忽略if并且总是低于地板(总和)
  3. 如果您知道目标总和

    • 如果sum表示进度状态
    • 你知道最后一个值(全部总和)
    • 然后是percentage=sum/whole_sum);

答案 3 :(得分:1)

x/(x+a)1-exp(-ax)怎么样?