PHP number_format():将数字四舍五入,然后格式化为货币
Posted
技术标签:
【中文标题】PHP number_format():将数字四舍五入,然后格式化为货币【英文标题】:PHP number_format(): rounding numbers and then formatting as currency 【发布时间】:2018-05-08 17:26:47 【问题描述】:我正在尝试创建一个电子商务商店,我们的价格需要随着不同国家/地区的汇率波动,所以我要处理很多小数位。
我想要做的是将原始价格四舍五入到最接近的整数(因为他们可以保留零钱)。但后来我想将其格式化为带两位小数的货币。
<?php
$number = 12345.6789;
echo $number; // outputs '12345.6789'
$number = number_format($number,0);
echo $number; // outputs '12,346'
$number = number_format($number,2);
echo $number; // outputs '12.00'
?>
格式化为无小数位后,它开始读取“,”作为小数分隔符,而不是千位分隔符,并将其格式化为两位小数。
它还会给出以下错误:
A non well formed numeric value encountered in C:\wamp64\www\Lifting365\test.php on line 6
我怎样才能达到我的目标?
【问题讨论】:
您每次都在覆盖数字,因此上次格式化时,您正在格式化12,346
而不是 12345.6789
。如果您想在将其格式化为货币之前将其四舍五入为整数,请尝试使用 round()
或 ceil()
而不是 number_format()
。
@aynber,是的,这正是我所需要的,非常感谢你
【参考方案1】:
如文档中所述,number_format 返回一个字符串值,您不能将其作为数字重用。 使用函数round() 对数字进行四舍五入,如果要将其四舍五入为直接上整数,请改用ceil()。
number_format(round(12345.6789), 2);
【讨论】:
【参考方案2】:// 应用 intval 来获取低整数值(用于更改目的)
$number = 12345.6789;
echo $number; // outputs '12345.6789'
echo intval($number)."<br/>"; // outputs '12345'
echo number_format(intval($number),0,'.','.'); // outputs '12.345'
echo number_format(intval($number),0,'.',','); // outputs '12,345'
【讨论】:
【参考方案3】:使用round
函数,然后使用number_format
。
// returns 12,346.00
number_format(round(12345.6789), 2);
【讨论】:
【参考方案4】:函数number_format
接受4 个参数。默认情况下,点将用作十进制分隔符,逗号用作千位分隔符(第一次调用后,12345.6789 变为 12,346;例外)。它没有明确记录,但 number_format 也可以舍入。
http://php.net/manual/de/function.number-format.php
string number_format ( float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = "," )
您收到错误是因为您重复使用了相同的变量 $number
。在您第一次致电number_format
后,您不再有浮点值。
<?php
$number = 12345.6789;
echo $number."<br>"; // outputs 12345.6789
echo number_format($number,0)."<br>"; // outputs 12,346
echo number_format($number,2)."<br>"; // outputs 12,345.68
?>
如果您不确定变量中的内容,您可以将floatval
应用于它。
echo number_format(floatval($number),2);
【讨论】:
【参考方案5】:您正在寻找的 PHP 函数是 money_format() http://php.net/manual/en/function.money-format.php 仔细阅读手册页(包括 cmets)
【讨论】:
以上是关于PHP number_format():将数字四舍五入,然后格式化为货币的主要内容,如果未能解决你的问题,请参考以下文章
number_format 以小数点 5 结尾的数字向上取整
使用 PHP number_format() 得到一个奇怪的除法错误