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():将数字四舍五入,然后格式化为货币的主要内容,如果未能解决你的问题,请参考以下文章

舍入时 PHP 数字格式降为零

number_format 以小数点 5 结尾的数字向上取整

如何使 number_format() 不四舍五入

使用 PHP number_format() 得到一个奇怪的除法错误

尝试显示带两位小数的数字时 number_format 和 sprintf 的意外结果

没有四舍五入小数的树枝数字格式