PHP中输出的默认小数位数

时间:2008-12-10 18:35:51

标签: php decimal numbers

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

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

Muchas gracias。

6 个答案:

答案 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)

快速查看可用的INI设置会使我的precision值不同?

答案 2 :(得分:2)

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

return someNumber.' grams';

我刚将其改为

return (float)someNumber.' grams';

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

有人可以关闭吗?

答案 3 :(得分:0)

只是为了排除其他可能的原因:这些数字来自哪里?它是用文字值来做的吗?

单独的精确设置似乎不太可能导致这种情况。还要检查是否有任何内容可能通过auto_prepend_fileoutput_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
?>