我需要执行以下等式 floor(e%100000) 其中 e 是双精度数。我知道 mod 只接受 int 值,我该如何实现同样的结果?
谢谢
你为什么不先发言,然后是 mod,即。floor(e) % 100000
?
也许我误解了你想要达到的目标。你能举一个你期望的输入和输出的例子吗?
使用fmod
使用fmod()
函数而不是%
. 它接受double
参数,并返回double
结果。
您可以使用除法来等效于模:
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。