2010-08-28 76 views

回答

3

使用fmod()函數而不是%。它接受double參數,並返回double結果。

3

爲什麼你不先發言,然後mod,即。 floor(e) % 100000

也許我誤解了你想達到的目標。你能舉一個你期望的輸入和輸出的例子嗎?

+0

我正在將一個十進制數(從lat/long轉換而來)轉換爲米和東經,然後格式化它。 – 2010-08-28 10:36:50

+0

這應該或多或少等同於此處的任何其他解決方案。 – 2010-08-28 10:53:29

+0

只有'floor'的結果符合整數類型時,這才起作用。對於非常大的浮點數,你需要'fmod'(並且需要希望它的實現方式對大數是準確的),但是如果你使用大數的'fmod',你可能會誤用浮點數遇到一些令人討厭的精確丟失錯誤。 – 2010-08-28 11:54:10

0

你可以使用部門,使模相當於:

double e = 1289401004400.589201; 
const double divisor = 100000.0; 
double remainder = e - floor(e/divisor) * divisor; 
double result = floor(remainder); 
printf("%f\n", result); 

這將打印

4400.000000

當然,這是比慢得多任何內置的模...

您也可以使用fmod,如安德斯K.建議:)

編輯

固定的std :: COUT(C++)參照用printf(C)。修改了輸出。現在它完全是C.

+1

-1對於標記爲C的問題中的'cout',甚至在主題中表示C。 C不是C++。 – 2010-08-28 11:55:08