从价格中删除无关零的有效方法?

时间:2014-12-05 04:34:58

标签: php number-formatting

我将价格存储到五位小数的精度,例如:

1.95000
2.25000
0.01150
2.10000
2.00000

当显示价格时,我想显示标准$X.XX格式,如果其余数字只是零,但如果有有效数字,那么我不想删除它们(所以我不能简单地使用number_format())。

例如,上述价格应显示为:

1.95
2.25
0.0115
2.10
2.00

此过程必须以每页数百个价格完成。以这种方式格式化数字的有效方法是什么?

2 个答案:

答案 0 :(得分:3)

这使用正则表达式匹配尾随0之前的所有内容

$i = "$1.00";
$pattern = '/\$(\d+)\.(\d\d)(0*)/';
$replacement = '\$$1.$2';
print preg_replace($pattern,$replacement,$i);

在小数点右边的前两位数之后的所有内容上使用rtrim的另一种方式

$pos = strpos($i, '.') + 3;
print substr($i, 0, $pos) . rtrim(substr($i, $pos), '0');

答案 1 :(得分:2)

这有点难看,但它确实起作用了:

function formatPrice($price) {
    $out = (float)$price; // Trim off right-hand 0's
    $out = "$out"; // Typecast back to string
    if ((strlen($out) - strpos($out, '.')) <= 2) { // Test for string length after decimal point
        $out = number_format($out, 2); // Format back with 0's
    }
    return $out;
}

立即测试...... Works!

感谢@ FuzzyTree的回答,这是我的另一条评论中的单行函数:

function formatPrice($price) {
    return substr($price, 0, strpos($price, '.') + 3) . rtrim(substr($price, strpos($price, '.') + 3), '0');
}