drwj4061 2013-06-15 03:38
浏览 46
已采纳

php计算给出了1500000-20%的奇怪结果

May be I might be blind or silly, but look at my function:

function max_min_twenty($value) {
if ((int)$value == 0) {
    return "0"; 
} else {
    $percent_val = ((int)$value / 100) * 20;
    $maxvalue = (int)$value + $percent_val;
    $minvalue = (int)$value - $percent_val;
    $returnvalue = round($minvalue)."-".round($maxvalue);
    return $returnvalue;
}
}

Seems that this is really easy! It works like it should, but if my $value is 1500000 it gives me back 1,2E+6 for $minvalue - It does well if I choose a different number or if I change the percent to 19 or 21. Whats that?

Its running on PHP Version 5.2.4-2ubuntu5.27

  • 写回答

3条回答 默认 最新

  • dongzhen4180 2013-06-15 03:51
    关注

    Format the number explicitly as an integer? round returns a float and so I believe the default formatting is "getting confused" or "hitting an edge case" and reverts to displaying scientific notation. (I can't trigger the problem on ideone - it might be specific to a particular PHP version/environment - but the symptoms fit.)

    Try sprintf:

    return sprintf("%d-%d", $minvalue, $maxvalue);
    

    (I removed round as the %d forces the arguments to be treated as integers; however, there might be subtle differences in the rounding rules .. I don't know.)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗