我的价格是“0,10”或“00000,10”
现在我试试
number_format($price, 2, ',', '')
我得到0,00。 我怎样才能解决这个问题?我想要0,10美元。 我不想舍入。
或者当我有5,678时,我得到5,68。但我想要5,67。
答案 0 :(得分:7)
您可以在使用floor:
进行四舍五入之前增加数字的大小$price = floor($price * 100) / 100;
$formatted = number_format($price, 2, ',', '');
另一种解决方案,它可以提供更好的精度,因为它避免了浮点运算,是用三位小数格式化它并在格式化后丢弃最后一位数字:
$formatted = substr(number_format($price, 3, ',', ''), 0, -1);
答案 1 :(得分:6)
有几个人提到将它四舍五入到3然后删掉最后一个字符。这实际上不起作用。假设您有2.9999并将其四舍五入为3.它是3.000。
这仍然不准确,最好的解决方案是:
$price = '5.678';
$dec = 2;
$price = number_format(floor($price*pow(10,$dec))/pow(10,$dec),$dec);
这样做取价格乘以100(10 ^十进制)得到567.8,然后我们使用floor来得到它567,然后我们将它除以100得到5.67
答案 2 :(得分:4)
你应该在使用str_replace之前将逗号填充的数字转换回正常的小数。 $ number = str_replace(“,”,“。”,$ number); 然后你可以使用number_format
答案 3 :(得分:4)
"00000,10"
是一个字符串。你应该小数点。要获得所需的行为,您可以使用:
echo substr(number_format(str_replace(',', '.', $price), 3, ',', ''), 0, -1);
答案 4 :(得分:2)
在执行number_format
之前,字符串“0,10”由php转换为数字。因为php总是使用英语符号,所以它不会用逗号来表示。
echo "4 apples" + 2;
output: 6
“apples”部分会被忽略,就像忽略“,10”一样。
将“,”转换为“。”允许php查看其他数字。
$price = str_replace(',', '.', '0,10');
number_format($price, 2, ',', '');
答案 5 :(得分:2)
我的问题是html验证器错误messege thar number_format()
参数不是双倍。
我通过为number_format(floatval($var),2,'.',' ')
之类的参数设置floatval来解决此错误消息,这样做效果很好。
答案 6 :(得分:1)
如果你只是想要清除前导零并且只是限制长度,而不是舍入到一定数量的小数位,则可以使用更通用的解决方案:
function cutafter($string,$cutpoint,$length)
{
$temp = explode($cutpoint,$string);
$int = $temp[0];
$sub = $temp[1];
return number_format($int,0).','.substr($sub,0,$length);
}
示例:
$number = "005,678";
$answer = cutafter($number,",",2);
$ answer现在等于“5,67”
答案 7 :(得分:1)
使用此(需要激活的intl PHP扩展名)
$numberFmtCurrency = new NumberFormatter('de_AT', NumberFormatter::CURRENCY);
$numberFmtCurrency->setAttribute(NumberFormatter::ROUNDING_INCREMENT, 0);
$numberFmtCurrency->formatCurrency(328.13, 'EUR'); // prints € 328.13 (and not 328.15)
答案 8 :(得分:0)
function format_numeric($value) {
if (is_numeric($value)) { // is number
if (strstr($value, ".")) { // is decimal
$tmp = explode(".", $value);
$int = empty($tmp[0]) ? '0' : $tmp[0];
$dec = $tmp[1];
$value = number_format($int, 0) . "." . $dec;
return $value;
}
$value = number_format($value);
return $value;
}
return $value; // is string
}
Unit Testing:
Passed / 1100000 => 1,100,000
Passed / ".9987" => .9987
Passed / 1100.22 => 1,100.22
Passed / 0.9987 => 0.9987
Passed / .9987 => 0.9987
Passed / 11 => 11
Passed / 11.1 => 11.1
Passed / 11.1111 => 11.1111
Passed / "abc" => "abc"
答案 9 :(得分:0)
有关更多详细信息,请参见this answer。
function numberFormat($number, $decimals = 0, $decPoint = '.' , $thousandsSep = ',')
{
$negation = ($number < 0) ? (-1) : 1;
$coefficient = pow(10, $decimals);
$number = $negation * floor((string)(abs($number) * $coefficient)) / $coefficient;
return number_format($number, $decimals, $decPoint, $thousandsSep);
}