【问题标题】:Selectional number formatting of array values数组值的选择数字格式
【发布时间】:2023-03-06 20:45:01
【问题描述】:

我在一个 mysql 表中有两种类型的数字(FLOAT 和 BIGINT)。

A:0.002

乙:51443234

我需要替换“。”在数字中带有“,”,我可以通过 number_format 来完成

foreach ($row as $key => $val) { 
                if (is_numeric($val)) {

                        $row[$key] = number_format($val,'3', ',', '.'); }
                }
            }

新格式是:

答:0,002

B:51.443.234,000

但我不希望数字 B 中的尾随零,所以我尝试分别格式化 FLOAT 和 BIGINT 值:

foreach ($row as $key => $val) { 
                if (is_numeric($val)) {
                        if (is_float($val)) {
                        $row[$key] = number_format($val,'3', ',', '.'); }
                        else {
                        $row[$key] = number_format($val,'0', ',', '.'); }
                }
            }

但这不起作用。

我不确定问题出在哪里,是否可以在不将值转换为字符串的情况下做到这一点。

(我也不知道转换成字符串有什么缺点..)

您能展示一下正确的方法吗? 谢谢。

【问题讨论】:

    标签: php arrays number-formatting


    【解决方案1】:

    PHP 是一种松散类型的语言,因此它不知道 FLOATSBIGITS。事实上,0,00251.443.234 都不是有效值。

    为了进行计算,不要改变任何东西。为了显示您的数字,您可以根据需要设置它们的格式,即使它们是字符串。

    1. <?php
    2. $float = 2.25;
    3. $bigInt = 4235234;
    4.
    5. $commaFloat = 2,25;
    6. $commaBigInt = 4.235.234;
    7. ?>
    
    Parse error: syntax error, unexpected ',' on line 5
    

    http://codepad.org/epIuX8MZ

    【讨论】:

    • 那么,您是否建议在代码中一一格式化每个变量?
    • 不,仅在显示数字时。编写一个函数来根据需要格式化数字,并在每次要输出数字时调用该函数。 &lt;?= myNumberFormat($someValue); ?&gt;
    • 我有近 50 个数字变量,我必须列出它们。所以我将编写两个不同的函数(一个用于浮点数,一个用于大整数),然后在需要时使用它们。这是一个解决方案,但我仍然想知道我是否可以只用一个功能来做到这一点。谢谢。
    • 当然可以。您可以使用函数参数显式定义数字类型。例如,function myNumberFormat($number, $format) {} OR 尝试自动找出这个数字的格式,也许使用 RegEx。它应该是相对容易编写的函数。玩得开心!
    • 感谢您的想法。我写了一个这样的函数:myNumberFormat($number, $decimal) {} for bigint numbers $decimal is 0, for float numbers it depends..
    猜你喜欢
    • 2019-12-27
    • 2017-05-13
    • 2015-12-16
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多