保持双倍最大为 1.0

Keep a double at a max of 1.0

好的,这应该是一个相当简单的问题,但我做错了。我有一个返回双倍的累计和。这些代表百分比,它永远不应该是 0.0.. 所以我想使用 d % 1 来保持在 1 以下。适用于 2.13 变成 0.13,或者 2.98 变成 0.98,但是 3.0 变成 0.0 而不是 1.0 (100%)..

我显然在做一些根本性的错误?或者也许我只是作弊说 if 0 then 1?

谢谢

% 是模运算符

来自维基百科:

"In computing, the modulo operation finds the remainder after division of one number by another (sometimes called modulus)"

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

模数符合预期 - 3.0 除以 1.0 没有余数。

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

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

    • 为什么要设置为sum=sum%1
    • 如果意思是某个操作的百分比那么它不应该还是1.0吗?
    • 所以在总结的时候我会做这样的事情:

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

    • 但是那个操作对我来说没有任何意义(除了脉动进度条)
    • 除非这笔款项用于其他用途,否则我认为

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

    • 分别处理负值
    • 如果 1.0 也不需要,则忽略 if 并始终减去 floor(sum)
  3. 如果你知道目标总和

    • 如果总和代表进度状态
    • 并且您知道最后一个值(总和)
    • 然后percentage=sum/whole_sum);

x/(x+a)1-exp(-ax) 呢?