我在家里的开发盒上做我的php工作,在那里我有一个基本的LAMP设置。当我在我的主页框中查看我的网站时,我回显的任何数字都会自动截断到最低要求的精度。例如2被回复为2,2.2000被回复为2.2。
在生产框中,所有数字都至少回显一个不必要的零,例如100变为100.0。在这两个框中,PHP版本是5.2.5。有没有人知道我是否有可以更改的设置会强制PHP自动删除任何不必要的零?我不想去我的代码中的每个地方输出一个数字并用printf或类似的东西替换echo。
Muchas gracias。
答案 0 :(得分: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和其他一些方框上运行
答案 1 :(得分:3)
答案 2 :(得分:2)
感谢所有答案 - 解决方案是将负责方法的返回值强制转换为浮点数。即它在做什么
return someNumber.' grams';
我刚将其改为
return (float)someNumber.' grams';
然后PHP在需要时截断任何尾随零。
有人可以关闭吗?
答案 3 :(得分:0)
只是为了排除其他可能的原因:这些数字来自哪里?它是用文字值来做的吗?
单独的精确设置似乎不太可能导致这种情况。还要检查是否有任何内容可能通过auto_prepend_file
或output_handler
等内容干扰输出。
答案 4 :(得分:0)
你应该使用round()命令来总是向下舍入你想要的精度,否则有一天你会得到类似2.2000000000123的东西,因为浮点运算的性质。
答案 5 :(得分:0)
尝试内置函数round
;
float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] );
将val的舍入值返回到指定的精度(小数点后的位数)。精度也可以是负数或零(默认值)。
示例#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
?>
示例#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
?>