2014-06-16 36 views
0

我有一個隨機數,這是假設適合360.0f。我的問題是我的功能只適用於整數。我將如何讓另一個數字適合另一個均勻地向上或向下(最好是最接近的)讓一個數字可以被另一個數字整除,但使用浮點數?

我將如何使這個工作與浮游物?

下面是我得到了什麼:

public static float fitNumberEvenlyIntoAnother(int number, int numberToFitInto) 
{ 
    while(numberToFitInto % number != 0) 
    { 
     number += 1; 

     if(Math.abs(number/2f) > Math.abs(numberToFitInto)) 
     { 
      Log.w("fitNumberEvenlyIntoAnother", "Oh ow, the fitNumberEvenlyIntoAnother has surpassed the number it's suppose to fit into"); 
     } 
    } 

    //This number needs to fit into the number evenly. Cannot be null or nan. 
    return number; 
} 
+0

的範圍加的分數(在範圍內[0,1])的由於您使用'360.0'我承擔'號碼'是一個角度,應該調整到範圍內[0,360 [',例如「410度應該是50度」。那是對的嗎?如果不是,你能否舉例說明投入和預期產出? – Thomas

+0

這是正確的,但我打算不止一次地爲不同的範圍使用該功能。 –

+0

當然,你需要的只是%操作符?如果不是,爲什麼不呢? – EJP

回答

0

如果你想「調整」等多項x到一系列r(例如角度爲[0,360[),那麼你可以做到以下幾點:

double len = r.max - r.min; 
double frac = x/len - Math.floor(x/len);  
double result = frac < 0 ? r.min + len * (1 + frac) : r.min + len * frac; 

什麼喲做的是以下幾點:

  • 你得到的範圍的大小爲len360 - 0 = 360在度的情況下)
  • 你計算len/(x % len)
  • 如果分數是負的,你加1
  • 結果是下限的範圍內的長度
0

而是循環在結果的,只是測試,如果除法的結果是一個整數:

public static float fitNumberEvenlyIntoAnother(float number, float numberToFitInto) { 
    float result = numberToFitInto/number; 
    if (result == Math.round(result)) 
     return result; 
    return Float.NaN; 
} 

你沒有指出如果它不適合均勻地返回什麼 - 這個impl返回值not a number - 你可能想要做一些不同的事情。

+0

它需要返回一個數字,該數字可以減少或增加,直到它符合numberToFitInto。 –

相關問題