如何通过检查值来添加逗号和小数点

时间:2018-02-18 02:32:17

标签: php string decimal rounding number-formatting

我正在建立一个个人应用程序,我可以按照我目前持有和关注的加密货币。我注意到的问题是价格背后的小数。一种货币通常最多包含2位小数,但Coinmarketcap的API会根据价格而给我更多。

下面是我从API获得的值的示例,以及我实际上希望如何显示价格。高于1000的值将获得逗号而不是小数。

$ 950194.0 - > $ 950,194
$ 81851.6 - > $ 81,852
$ 4364.97 - > $ 4,365
$ 326.024 - > $ 326.02
$ 35.0208 - > $ 35.02
$ 4.50548 - > $ 4.51
$ 0.0547128 - > $ 0.0547128

我以前从未尝试过这样的事情,所以我真的不知道如何开始。尝试使用round()和numberFormat(),但不能像我在上面的例子中那样做。

1 个答案:

答案 0 :(得分:0)

您可以使用money_format让事情变得更轻松。但是,问题在于你想要precision。你必须自己搞清楚,因为我找不到你的例子中的模式。然而,我使用roundmoney_format为您编写了简单的函数。剩下的工作是将precision调整到您想要的每个案例的位置。

<?php

    function my_money_format($number, $precision=0)
    {
        $number = preg_replace( '/[^0-9.,]/', '', $number); // clean the input
        $number = round($number, $precision);
        $format = '%.' . $precision . 'n';
        setlocale(LC_MONETARY, 'en_US'); // set money format to US to use $
        return money_format($format, $number);
    }

    echo my_money_format('$950194.0', 0); // $950,194
    echo "\n";

    echo my_money_format('$81851.6', 0); // $81,852
    echo "\n";

    echo my_money_format('$4364.97', 0); // $4,365
    echo "\n";

    echo my_money_format('$326.024', 2); // $326.02
    echo "\n";

    echo my_money_format('$35.0208', 2); // $35.02
    echo "\n";

    echo my_money_format('$4.50548', 2); // $4.51
    echo "\n";

    echo my_money_format('$0.0547128', 7); // $0.0547128
    echo "\n";