如何使用PHP正确格式化此数字?

时间:2019-02-14 09:02:41

标签: php numbers

我有一个数字,小数点后有数字,但出于某种原因,在格式化它时,最后两个小数点始终为零。

例如,保存在我的数据库中的价格是154,95,但是我希望显示150像150,00这样的数字。所以我查找了number_format()并找到了以下信息:

number
The number being formatted.

decimals
Sets the number of decimal points.

dec_point
Sets the separator for the decimal point.

thousands_sep
Sets the thousands separator.

通过以上信息,我做到了:

echo number_format($artikel['prijs'],2,",",".");

逗号应为小数点分隔符,点应为千位分隔符。还是上面代码的154,95的结果是154,00,为什么?

我希望所有数字都具有相同的格式,一个数字在逗号后加两位小数,但这些数字应为零或更多。

3 个答案:

答案 0 :(得分:2)

问题在于,首先将价格“ 154,95”转换为数字154,然后number_format()开始执行其工作。 您要么将价格存储为154.95,要么将字符“,”替换为“”。在调用number_format()之前。 示例:

<?php
$a = "159.95";
$b = "12345";
$a_number = str_replace(",", ".", $a);
$b_number = str_replace(",", ".", $b);

echo number_format($a_number,2,",","."), "\n";
echo number_format($b_number,2,",","."), "\n";
?>

输出为:

159,95

12.345,00

答案 1 :(得分:2)

更改您的输入数字格式。

<?php
echo number_format("1000000")."<br>";
echo number_format("1000000",2)."<br>";
echo number_format("1000000",2,",",".");
?>

输出:-

1,000,000
1,000,000.00
1.000.000,00

答案 2 :(得分:1)

这会将您的数字四舍五入到最接近的10的倍数:

$n = 123.45;

$multiple = 10;

$result = (ceil($n)%$multiple === 0) ? ceil($n) : round(($n+$multiple/2)/$multiple)*$multiple;

echo $result;

然后number_format()将其转换为字符串,以分隔符(,。)显示。在不同的位置,它们在其他位置有逗号分隔小数点,在小数点之间有句号分隔数千,反之亦然,因此我通常将那些参数保留为可选参数,因为它们是可选的,我认为它可能会根据查看它的机器的区域设置而改变但我不确定。

所以我要添加:

$display_result = number_format($result,2);