1

我需要执行以下等式 floor(e%100000) 其中 e 是双精度数。我知道 mod 只接受 int 值,我该如何实现同样的结果?

谢谢

4

4 回答 4

3

你为什么不先发言,然后是 mod,即。floor(e) % 100000?

也许我误解了你想要达到的目标。你能举一个你期望的输入和输出的例子吗?

于 2010-08-28T10:29:14.340 回答
3

使用fmod

于 2010-08-28T10:30:10.407 回答
3

使用fmod()函数而不是%. 它接受double参数,并返回double结果。

于 2010-08-28T10:30:42.953 回答
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正如 Anders K. 建议的那样,您也可以使用:)

编辑

修复了 std::cout (C++) 引用以使用 printf (C)。修复了对输出的更改。现在它纯粹是C。

于 2010-08-28T10:45:42.543 回答