十进制货币格式

时间:2013-01-09 10:07:53

标签: php numbers format money-format

如何将所有数字转换为xx,xx十进制格式而不会爆炸数字或字符串? 等;

8,9 --> 8,90

8,99 --> 8,99

12,1 --> 12,10

129,9 --> 129,90

任何想法?

5 个答案:

答案 0 :(得分:5)

您可以使用number_format之类的:

$n = 2.1;
echo number_format($n, 2, ','); // 2,10

如果您在输入中使用逗号作为小数分隔符,则可以将值转换为浮点数:

$number = floatval(str_replace(',', '.', str_replace('.', '', $string_number)));

str_replace('.', '', $string_number)用于删除千位分隔符。 str_replace(',', '.', ... )用于用点替换逗号。

答案 1 :(得分:3)

如果您启用了intl扩展程序,则问题的最佳解决方法(IMO)将在此问题的接受答案中给出:PHP: unformat money

  

您可以使用

           

手册示例:

$formatter = new NumberFormatter('de_DE', NumberFormatter::CURRENCY);
var_dump($formatter->parseCurrency("75,25 €", $curr));
     

给出:float(75.25)

     

请注意,默认情况下未启用intl extension。请   请参阅Installation Instructions

之后,使用number_format(),您将拥有浮动值和格式,这是一个微不足道的问题。

如果您没有该扩展程序,请查看此问题中的正则表达式方法:What a quick way to clean up a monetary string

答案 2 :(得分:1)

$money = number_format($number, 2, ",", ","); // $number must be a float, i.e 8.8

如果你的输入必须有逗号作为小数分隔符,也可以这样做:

$money = "20,2";
$fixed_money = floatval(str_replace(",", ".", $money));
echo number_format($fixed_money, 2, ",", ",");

答案 3 :(得分:0)

str_pad将添加缺少的零

$val = '1008,95';
$len = strpos($val, ',') + 3;
$newval = str_pad($val, $len, '0', STR_PAD_RIGHT);
echo "Value: " . $newval . "<br>";

您必须确保您的值不超过两位小数,但

答案 4 :(得分:0)

我制作了一个作曲家包,可以处理这些事情,具体取决于你所显示的货币。

https://packagist.org/packages/votemike/money

如果您还输入国家/地区,它将以本地方式格式化货币(带或不带逗号和正确的小数位数)

import MapKit

class HideableMapView: MKMapView {

    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {

        if self.containsZeroHeightConstraint() {
            // Set the bounds manually before the constraint gets processed to prevent an auto layout warning
            self.bounds.size.height = 0
        }

        super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
    }

    private func containsZeroHeightConstraint() -> Bool {
        return (self.constraints.filter { $0.firstAttribute == .height && $0.constant == 0 }).isEmpty == false
    }
}

因此,如果您只是创建一个新的货币对象,其中包含您要显示的金额以及您显示的货币,那么在该对象上调用 - &gt; format()应该会给您带来的结果对