1

可能是我可能是盲目或愚蠢的,但看看我的功能:

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;
}
}

看来这真的很容易!它应该像它应该的那样工作,但是如果我的$value是 1500000,它会给我1,2E+6$minvalue - 如果我选择不同的数字或者如果我将百分比更改为 19 或 21,它会很好。那是什么?

它在 PHP 版本 5.2.4-2ubuntu5.27 上运行

4

3 回答 3

0

将数字显式格式化为整数round返回一个浮点数,所以我相信默认格式是“变得困惑”或“遇到边缘情况”并恢复为显示科学记数法。(我无法在ideone上触发问题——它可能特定于特定的 PHP 版本/环境——但症状很合适。)

尝试sprintf

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

(我删除round%d强制将参数视为整数的参数;但是,舍入规则可能存在细微差别......我不知道。)

于 2013-06-15T03:51:32.323 回答
0

尝试使用 number_format

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 = number_format(round($minvalue),"0","-","")."-   ".number_format(round($maxvalue),"0","-","");
    echo $returnvalue;
}
}

它将科学记数法改为标准形式。

于 2013-06-15T03:56:01.077 回答
0

您在旧版本的 PHP 中看到了错误行为。这是在 PHP 5.3.0 中解决的错误 #43053 。

举个例子,这段代码:

for ($i = 1000000; $i < 2000000; $i += 100000)
    echo round($i) . "--\n";

在 PHP 5.2.6 及更低版本上,它会产生以下内容(示例不能保证 CodePad 将始终在旧 PHP 上):

1000000--
1100000--
1.2E+6--
1300000--
1.4E+6--
1500000--
1600000--
1.7E+6--
1800000--
1.9E+6--

但是,在 PHP 5.3.0 及更高版本上,可以看到正确的行为:

1000000--
1100000--
1200000--
1300000--
1400000--
1500000--
1600000--
1700000--
1800000--
1900000--

round()正如@user2246674 在他的回答中所建议的那样,这可以通过升级 PHP 或避免来解决。

于 2013-06-15T04:01:53.017 回答