我的数据库产品价格是小数部分的4位数,即
4.5000
0.0050
5.0000
我想在网站上显示这些价格至少2位小数(没有舍入),即
4.50
0.005
5.00
我尝试number_format
,但它仍然在小数部分留下4位数。
而且我还需要在该数字的基础部分使用千位分隔符并拥有小数部分的分隔符。
怎么做?
答案 0 :(得分:2)
function trimDecimalZero($num, $delim = ',', $tsep = ' ') {
@list($base, $decimals) = explode('.',
rtrim(number_format((float) $num, 4, '.', $tsep), '0'));
if (intval($decimals)) {
return sprintf('%s%s%s',
$base, $delim, strlen($decimals) < 2 ? $decimals .'0' : $decimals);
}
return sprintf('%s%s%02d', $base, $delim, $decimals);
}
$nums = [4.5000, 0.0050, 5.0000];
foreach ($nums as $num) {
var_dump(trimDecimalZero($num));
}
按预期结果;
string(4) "4,50" string(5) "0,005" string(4) "5,00"
答案 1 :(得分:1)
为了将来的参考,我再一次修改了我的答案,是的,它输出了预期的结果:
function trimDecimalZero($number) {
$number += 0;
if(strlen(substr(strrchr($number, "."),1)) < 2) {
$number = sprintf("%0.2f", $number);
}
return $number;
}
echo trimDecimalZero(4.5000); //4.50
echo trimDecimalZero(0.00050); //0.00005
echo trimDecimalZero(5.0000); //5.00
希望这有助于未来的读者!
答案 2 :(得分:1)
尝试 -
echo number_format('4.5000', 2);
<强>更新强>
$v = (float)'0.0050';
$newV = explode('.', $v);
if(strlen($newV[1]) < 2) {
$v = number_format($v, 2);
}
echo $v;
答案 3 :(得分:0)
我想如果是出于显示目的,你可以这样做:
$number= 4.500000;
$number.= 'x';
$length = strlen($number);
$new_number = rtrim($number, '0x');
if (strlen($new_number) < $length) {
$new_number .= '0';
}
echo $new_number;