2015-03-19 72 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