php 循环语句影响函数精度问题

问题描述:本人使用的是 php 5.3版本,fmod函数在单独使用的时候,计算结果正确,但是在放入循环语句内部使用时,却会出现错误.(例如fmod(2.5,1.25)结果变成了8.8817841970013E-16而非正确结果0,fmod(5,1.25)结果变成了1.25而非0),请问各位,问题需要怎么解决可以获得正确的计算结果?

示例代码如下:

$i=0.1;
while($i<5){
  $余数=fmod($i,1.25);
  echo "原数:".$i."  余数:".$余数."<br>";
  $i=$i+0.1;
}
php
最佳答案

老生常谈的精度问题, $i=$i+0.1;会导致精度问题,可以使用bcadd尝试一下

  $i=0.1;
  while($i<=5){
     $f=fmod((float)$i,1.25);
     echo "原数:".$i."  余数:".$f."<br>";
     $i=bcadd((string)$i, '0.1', 2);
  }
5个月前 评论
JHline (楼主) 5个月前
讨论数量: 4

老生常谈的精度问题, $i=$i+0.1;会导致精度问题,可以使用bcadd尝试一下

  $i=0.1;
  while($i<=5){
     $f=fmod((float)$i,1.25);
     echo "原数:".$i."  余数:".$f."<br>";
     $i=bcadd((string)$i, '0.1', 2);
  }
5个月前 评论
JHline (楼主) 5个月前

不只是加的问题,使用 bcmod 计算任意精度数字取模。BC 数学 函数

5个月前 评论
JHline (楼主) 5个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!