【问题标题】:Split a number by decimal point in php在php中按小数点拆分数字
【发布时间】:2009-01-05 11:40:23
【问题描述】:

如何在php中用小数点分割数字?

我有 $num = 15/4;这将 $num 变为 3.75。我想拆分 3 和 75 部分,所以 $int = 3 和 $dec = 75。我的非工作代码是:

$num = 15/4; // or $num = 3.75;
list($int, $dec) = split('.', $num);

但这会导致 $int 和 $dec 为空。

提前致谢。

【问题讨论】:

    标签: php split


    【解决方案1】:

    如果您explode 数字的十进制表示,您将失去精度。如果您不介意,那就这样吧(对于文本表示来说没关系)。考虑语言环境!我们比利时人使用逗号(至少是非编程的:)。

    如果您确实介意(例如用于计算),您可以使用floor 函数:

    $num = 15/4
    $intpart = floor( $num )    // results in 3
    $fraction = $num - $intpart // results in 0.75
    

    注意:这是针对正数的。对于负数,您可以反转符号,使用正方法,然后重新反转 int 部分的符号。

    【讨论】:

    • 巴西人也使用逗号作为小数分隔符和句点作为千分位分隔符。使用us2.php.net/manual/en/function.localeconv.php 找出适合您的语言环境的正确分隔符
    • 比利时人和巴西人并没有太大的不同 :)。真的应该有人为此编写一个库。
    【解决方案2】:

    试试explode

    list($int,$dec)=explode('.', $num);
    

    因为您实际上并不需要使用基于正则表达式的拆分。 Split 不适合你作为“。”字符需要转义以提供文字匹配。

    【讨论】:

    • 请注意,您确实会以这种方式失去精度 - 不要以此为基础进行计算。
    【解决方案3】:
    $num = 15/4; // or $num = 3.75;
    list($int, $dec) = explode('.', $num);
    

    【讨论】:

      【解决方案4】:
      $int = $num > 0 ? floor($num) : ceil($num);
      $dec = $num - $int;
      

      如果您希望 $dec$num 为负数时为正数(与其他答案一样),您可以这样做:

      $dec = abs($num - $int);
      

      【讨论】:

      • 负数失败,例如如果 $num=-17.3,则 $int=18 和 $dec=0.7
      【解决方案5】:
      $num = 3.75;
      $fraction = $num - (int) $num;
      

      【讨论】:

        【解决方案6】:
        $num = 15/4;
        substr(strrchr($num, "."), 1)
        

        【讨论】:

        • 请解释一下你的答案。
        【解决方案7】:

        这适用于正数和负数:

        $num = 5.7;
        $whole = (int) $num;         //  5
        $frac  = $num - (int) $num;  // .7
        

        【讨论】:

          【解决方案8】:

          如果您不想丢失精度,可以使用这些:

          $number = 10.10;
          $number = number_format($number, 2, ".", ",");
          sscanf($number, '%d.%d', $whole, $fraction);
          
          // you will get $whole = 10, $fraction = 10
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-05-09
            • 2021-11-06
            • 2022-11-14
            • 1970-01-01
            • 1970-01-01
            • 2023-03-11
            相关资源
            最近更新 更多