2015-03-19 57 views
-1

好吧,这应该是一个相当简单的问题,但我不能得到这个权利。我有一个累计金额返回一倍。这些代表的百分比,它不应该是0.0 ..所以我想用d%1保持在1以下。工作罚款为2.13成为0.13,或2.98成为0.98,但3.0成为0.0不是1.0(100%)..保持双倍最大值为1.0

我明显在做一些根本性错误吗?或者我只是欺骗,并说如果0然后1?

由于

+0

2.0给你什么?我不完全明白你在做什么。作为一般规则,在Java中进行数学运算时使用BigDecimal。 – jmf1205 2015-03-19 05:36:46

+0

2%1 = 0 ..它是一个小数运行列表,但每次遇到一个整数时,我希望它导致1如此1,2,3,...,n = 1,1,1,1。 1.1,2.1,...,n.1 = 0.1,0.1等 – mythstified 2015-03-19 05:49:49

+0

你想要'0%1' =>'1'吗? – 2015-03-19 06:14:49

回答

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); 
      } 
      
    • 如果你的总和可以是负的,然后如果1.0也不想与ceil

    • 单独处理负值则忽略该项if和副楼(总和)始终
  3. 如果你知道目标总

    • 如果总和是代表进步状态
    • ,你知道的最后一个值(整笔)
    • 那么percentage=sum/whole_sum);
2

%为模运算符

维基百科:

“在计算中,该模运算发现由另一人数的除法(有时称为模数)后的余数”

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

1

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

如果你要处理没有剩余的特殊情况:

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

什么x/(x+a)1-exp(-ax)

+0

@YvesDaoust,如果目标总数只是大概知道的话,非常好:)没有想到(+1) – Spektre 2015-03-19 18:40:39