php - fmod 返回不正确的结果

标签 php floating-point fmod

为什么 PHP 的 fmod 函数不能按预期工作。我错过了什么吗?

fmod(2.0, 0.1); // outputs 0.1

以下应输出 0,因为 2.0/0.1 = 20,因此没有余数。我知道 float 学错误,但这个函数是专门为 float 设计的,所以我不确定为什么它会返回不正确的结果。

最佳答案

最接近 0.1 的 IEEE 754 64 位二进制数是 0.1000000000000000055511151231257827021181583404541015625。大于2.0的20倍。它少了 19 倍,余数为 0.0999999999999998667732370449812151491641998291015625。根据您打印剩余部分的方式,它可能会显示为“0.1”。

这里的关键是 fmod 完全它应该做的,给定实际输入 2.0 和 0.1000000000000000055511151231257827021181583404541015625。无法准确表示 0.1 是二进制 float 的一个众所周知的后果。

关于php - fmod 返回不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32996034/

相关文章:

php - 使用 PHP 创建 MySQL 表时出现未知错误

c - 四舍五入为整数

Java float 与 double

c - 用点 eclipse 代替逗号

c++ - FMOD 结果未被识别为有效类型?

android - 在 C 和 Fmod : Functions gets undefined reference 中为 Android 编译终端 mp3player

javascript - 图像选择器不止一个

php - 升级 phpMyAdmin 到 4.3.4

PHP 调用 Postgres void 函数

audio - C & Fmod Ex - 实时播放 PCM 阵列/缓冲区