2011-11-28 72 views

回答

7

a-floor(a/b)*b - 假定ab都是正值?

你可以說「餘數」對於浮動分類不是一個合適的概念,但我會留下你自己的判斷。

+0

我一直在爲'99.6'和'0.2'獲得'0.2'的值 - 雖然它當然只是0因爲'996%2'爲0. –

26

使用fmod,計算浮點模數。

double remainder = fmod(a_double, another_double); 

如果你想使用的float代替double你會使用fmodf代替。

+0

'fmod(97.2,0.2)'返回0.2,這不是很有用。 –

+0

@TomášZato問題在於,97.2和0.2都不能表示_exactly_作爲浮點數。請參閱[爲什麼浮點數不準確?](http://stackoverflow.com/questions/21895756/why-are-floating-point-numbers-incucurate)。在我的調試器中,我得到了'97.200000000000002'和'0.20000000000000001'作爲參數,結果爲'0.19999999999999746'。您可能需要一個定點數學庫來滿足您的需求。 – DarkDust

+0

我想這也解釋了爲什麼'if(remaining == 0 || remainder == another_double)'也失敗了,因爲'0.19999999999999746'不等於'0.2'。我會比較數字之間的差異。 –