2

我在家里的开发盒上做我的 php 工作,在那里我有一个基本的 LAMP 设置。当我在我的 home box 上查看我的网站时,我回显的任何数字都会自动截断到最低要求的精度。例如 2 回显为 2,2.2000 回显为 2.2。

在生产框上,所有数字都与至少一个不必要的零相呼应,例如,100 变为 100.0。在这两个盒子上,PHP 版本都是 5.2.5。有没有人知道我可以更改的设置会强制 PHP 自动删除任何不必要的零?我不想去我的代码中输出数字并用 printf 或类似的东西替换 echo 的每个地方。

非常感谢。

4

6 回答 6

5

当您不能依赖 PHP 配置时,不要忘记number_format(),您可以使用它来定义如何返回数字,例如:

// displays 3.14 as 3 and 4.00 as 4    
print number_format($price, 0); 
// display 4 as 4.00 and 1234.56 as 1,234.56 aka money style
print number_format($int, 2, ".", ","); 

PS:并尽量避免使用money_format(),因为它不适用于Windows 和其他一些机器

于 2008-12-10T18:51:39.140 回答
3

快速浏览可用的INI设置让我觉得你的精度值不同?

于 2008-12-10T18:46:17.013 回答
2

感谢所有答案 - 解决方案是将负责的方法的返回值转换为浮点数。即它在做

return someNumber.' grams';

我只是将其更改为

return (float)someNumber.' grams';

然后 PHP 在需要时截断任何尾随零。

有人可以关闭这个吗?

于 2008-12-11T11:57:17.337 回答
0

只是为了排除其他可能的原因:这些数字来自哪里?它是否使用文字值执行此操作?

单独的精度设置似乎不太可能导致这种情况。auto_prepend_file还要检查是否有任何东西可能通过或之类的东西干扰输出output_handler

于 2008-12-10T18:51:59.497 回答
0

您应该使用 round() 命令始终向下舍入所需的精度,否则由于浮点运算的性质,有一天您会得到类似 2.2000000000123 的结果。

于 2008-12-10T18:52:43.677 回答
0

尝试内置功能round

float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] );

将 val 的四舍五入值返回到指定精度(小数点后的位数)。精度也可以是负数或零(默认)。

Example #1 round() 例子

<?php
echo round(3.4);         // 3
echo round(3.5);         // 4
echo round(3.6);         // 4
echo round(3.6, 0);      // 4
echo round(1.95583, 2);  // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2);    // 5.05
echo round(5.055, 2);    // 5.06
?>

Example #2 模式示例

<?php
echo round(9.5, 0, PHP_ROUND_HALF_UP);   // 10
echo round(9.5, 0, PHP_ROUND_HALF_DOWN); // 9
echo round(9.5, 0, PHP_ROUND_HALF_EVEN); // 10
echo round(9.5, 0, PHP_ROUND_HALF_ODD);  // 9

echo round(8.5, 0, PHP_ROUND_HALF_UP);   // 9
echo round(8.5, 0, PHP_ROUND_HALF_DOWN); // 8
echo round(8.5, 0, PHP_ROUND_HALF_EVEN); // 8
echo round(8.5, 0, PHP_ROUND_HALF_ODD);  // 9
?>
于 2011-12-01T09:01:02.960 回答