PHP number_format是四舍五入的?

Php*_*hh7 10 php rounding number-formatting

我有一个价格"0,10"或"00000,10"

现在,当我尝试

number_format($price, 2, ',', '')
Run Code Online (Sandbox Code Playgroud)

我得到0,00.我怎样才能解决这个问题?我想要0,10美元.我不想舍入.

或者当我有5,678时,我得到5,68.但我想要5,67.

Emi*_*röm 7

你可以增加数的大小舍去与前地板:

$price = floor($price * 100) / 100;
$formatted = number_format($price, 2, ',', '');
Run Code Online (Sandbox Code Playgroud)

另一种解决方案,它可以提供更好的精度,因为它避免了浮点运算,是用三位小数格式化它并丢弃格式化后的最后一位数:

$formatted = substr(number_format($price, 3, ',', ''), 0, -1);
Run Code Online (Sandbox Code Playgroud)


小智 7

有几个人提到将它四舍五入到3然后删掉最后一个字符.这实际上不起作用.假设您有2.9999并将其四舍五入至3.000.

这仍然不准确,最好的解决方案是:

$price = '5.678';
$dec = 2;
$price = number_format(floor($price*pow(10,$dec))/pow(10,$dec),$dec);
Run Code Online (Sandbox Code Playgroud)

这样做取价格并乘以100(10 ^十进制)得到567.8,然后我们用floor来得到它567,然后我们将它除以100得到5.67