2010-08-28 35 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